@Test(expected = io.github.seleniumquery.by.firstgen.css.pseudoclasses.UnsupportedPseudoClassException.class) public void toElementFinder__not_and_direct_ancestor() { assertPseudoClassHasElementFinderWhenNativelySupported( ":not(div)", new CssNotPseudoClass(new AstCssNotPseudoClass(ParseTreeBuilder.parse("h3>h4"))), // :not(h3>h4) "*", PseudoClassAssertFinderUtils.PURE_CSS_IS_NOT_SUPPORTED, ".//*[not(self::h4 and DIRECT-ANCESTOR/*[self::h3])]", empty() ); }
@Test(expected = io.github.seleniumquery.by.firstgen.css.pseudoclasses.UnsupportedPseudoClassException.class) public void toElementFinder__not_and_general_sibling() { assertPseudoClassHasElementFinderWhenNativelySupported( ":not(div)", new CssNotPseudoClass(new AstCssNotPseudoClass(ParseTreeBuilder.parse("h3+h4"))), // :not(h3~h4) "*", PseudoClassAssertFinderUtils.PURE_CSS_IS_NOT_SUPPORTED, ".//*[not(self::h4 and GENERAL-SIBLING/*[self::h3])]", empty() ); }
@Test public void toElementFinder__when_driver_has_native_support_BUT_inner_css_can_be_separated() { assertPseudoClassHasElementFinderWhenNativelySupported( ":not(div)", new CssNotPseudoClass(new AstCssNotPseudoClass(ParseTreeBuilder.parse("h1,h2"))), // :not(h1,h2) ":not(h1):not(h2)", PseudoClassAssertFinderUtils.PURE_CSS_IS_SUPPORTED, ".//*[not(self::h1 | self::h2)]", empty() ); }
@Test(expected = io.github.seleniumquery.by.firstgen.css.pseudoclasses.UnsupportedPseudoClassException.class) public void toElementFinder__not_and_general_ancestor() { assertPseudoClassHasElementFinderWhenNativelySupported( ":not(div)", new CssNotPseudoClass(new AstCssNotPseudoClass(ParseTreeBuilder.parse("h3 h4"))), // :not(h3 h4) "*", PseudoClassAssertFinderUtils.PURE_CSS_IS_NOT_SUPPORTED, ".//*[not(self::h4 and ANY-ANCESTOR/*[self::h3])]", empty() ); }
@Test(expected = io.github.seleniumquery.by.firstgen.css.pseudoclasses.UnsupportedPseudoClassException.class) public void toElementFinder__not_and_direct_sibling() { assertPseudoClassHasElementFinderWhenNativelySupported( ":not(div)", new CssNotPseudoClass(new AstCssNotPseudoClass(ParseTreeBuilder.parse("h3+h4"))), // :not(h3+h4) "*", PseudoClassAssertFinderUtils.PURE_CSS_IS_NOT_SUPPORTED, ".//*[not(self::h4 and DIRECT-SIBLING/*[self::h3])]", empty() ); }
@Test public void toElementFinder__when_driver_has_native_support() { assertPseudoClassHasElementFinderWhenNativelySupported( ":not(div)", new CssNotPseudoClass(new AstCssNotPseudoClass(ParseTreeBuilder.parse("span"))), // :not(span) ":not(span)", PseudoClassAssertFinderUtils.PURE_CSS_IS_SUPPORTED, ".//*[not(self::span)]", empty() ); }
pseudoClassesF.put(AstCssLastPseudoClass.PSEUDO, a -> new AstCssLastPseudoClass()); pseudoClassesF.put(AstCssLtPseudoClass.PSEUDO, a -> new AstCssLtPseudoClass(extractIndexArgument(a, AstCssLtPseudoClass.PSEUDO))); pseudoClassesF.put(AstCssNotPseudoClass.PSEUDO, a -> new AstCssNotPseudoClass(parseFunctionalPseudoClassSelectorArgument(AstCssNotPseudoClass.PSEUDO_PURE_NOT, a))); pseudoClassesF.put(AstCssNotPseudoClass.PSEUDO_PURE_NOT, a -> new AstCssNotPseudoClass(parseFunctionalPseudoClassSelectorArgument(AstCssNotPseudoClass.PSEUDO_PURE_NOT, a))); pseudoClassesF.put(AstCssNthPseudoClass.PSEUDO, a -> new AstCssNthPseudoClass(extractIndexArgument(a, AstCssNthPseudoClass.PSEUDO))); pseudoClassesF.put(AstCssOddPseudoClass.PSEUDO, a -> new AstCssOddPseudoClass());
pseudoClassesF.put(AstCssLastPseudoClass.PSEUDO, a -> new AstCssLastPseudoClass()); pseudoClassesF.put(AstCssLtPseudoClass.PSEUDO, a -> new AstCssLtPseudoClass(extractIndexArgument(a, AstCssLtPseudoClass.PSEUDO))); pseudoClassesF.put(AstCssNotPseudoClass.PSEUDO, a -> new AstCssNotPseudoClass(parseFunctionalPseudoClassSelectorArgument(AstCssNotPseudoClass.PSEUDO_PURE_NOT, a))); pseudoClassesF.put(AstCssNotPseudoClass.PSEUDO_PURE_NOT, a -> new AstCssNotPseudoClass(parseFunctionalPseudoClassSelectorArgument(AstCssNotPseudoClass.PSEUDO_PURE_NOT, a))); pseudoClassesF.put(AstCssNthPseudoClass.PSEUDO, a -> new AstCssNthPseudoClass(extractIndexArgument(a, AstCssNthPseudoClass.PSEUDO))); pseudoClassesF.put(AstCssOddPseudoClass.PSEUDO, a -> new AstCssOddPseudoClass());
@Test public void toElementFinder__when_driver_does_NOT_have_native_support() { CssNotPseudoClass notTag = new CssNotPseudoClass(new AstCssNotPseudoClass(ParseTreeBuilder.parse("tag"))); // :not(tag) assertPseudoClass(notTag).whenNotNativelySupported().translatesToPureXPath(".//*[not(self::tag)]"); }
@Test public void visitCssNotPseudoClass() { assertVisitorVisitsCorrectClass(new AstCssNotPseudoClass(ParseTreeBuilder.parse(".clazz"))); }