@Override public ElementFinder toElementFinder(WebDriver webDriver) { ElementFinder leftSideElementFinder = leftSideSelector.toElementFinder(webDriver); CssFinder combinatorFinder = leftSideElementFinder.getCssFinder().combineAsLeftPart(this.cssCombinator); ElementFinder intermediateFinder = new ElementFinder(combinatorFinder, leftSideElementFinder.getXPathExpression() + this.xPathCombinator, leftSideElementFinder); return rightSideSelector.toElementFinder(intermediateFinder); }
public List<WebElement> findWebElements(SearchContext context) { if (canFetchThroughCssAlone()) { return cssFinder.findElements(context); } return xPathAndFilterFinder.findElements(context); }
default ElementFinder __createFinderForNativelySupportedPseudo(ElementFinder leftFinder, WebDriver webDriver) { return new ElementFinder( webDriver, leftFinder.getCssFinder().merge(toCssWhenNativelySupported(webDriver)), leftFinder.getXPathAndFilterFinder().merge(toXPath(webDriver), xPathMergeStrategy()) ); }
default ElementFinder __createFinderForUnsupportedPseudo(ElementFinder leftFinder, WebDriver webDriver) { return new ElementFinder( webDriver, CSS_NOT_NATIVELY_SUPPORTED, leftFinder.getXPathAndFilterFinder().merge(toXPath(webDriver), xPathMergeStrategy()) ); }
public static void assertFilterOnlyPseudoGeneratesFilter(CssPseudoClassCondition pseudoClassCondition, ElementFilter pseudoClassFilter) { ElementFinder previous = universalSelectorFinder(createWebDriverWithNativeSupportForNoPseudoClass()); // when ElementFinder elementFinder = pseudoClassCondition.toElementFinder(previous); // then assertThat(elementFinder.toCssString(), is(previous.toCssString())); assertThat(elementFinder.canFetchThroughCssAlone(), is(false)); assertThat(elementFinder.getXPathExpression(), is(previous.getXPathExpression())); assertThat(elementFinder.getElementFilterList().getElementFilters(), contains(pseudoClassFilter)); }
@Test public void toCssString() { CssFinder cssFinder = new CssFinder("a", "b", "c"); ElementFinder elementFinder = new ElementFinder(null, cssFinder, null); assertEquals(cssFinder.toString(), elementFinder.toCssString()); }
public ElementFinder(CssFinder newCssSelector, String newXPathExpression, ElementFinder previous) { this(previous.webDriver, newCssSelector, previous.getXPathAndFilterFinder().newXPathExpressionKeepingEverythingElse(newXPathExpression)); }
private String toChainedNotSelectors(WebDriver webDriver) { return astCssNotPseudoClass.getArgument().stream() .map(cssSelector -> ":" + PSEUDO_PURE_NOT + "(" + cssSelector.toElementFinder(webDriver).toCssString() + ")") .collect(Collectors.joining()); }
@Override public ElementFinder toElementFinder(WebDriver webDriver) { XPathAndFilterFinder xPathAndFilterFinder = new XPathAndFilterFinder(toXPath(), ElementFilterList.FILTER_NOTHING_LIST) { @Override public String getXPathExpression() { return ".//*[" + getRawXPathExpression() + "]"; } }; return new ElementFinder(webDriver, toCSS(), xPathAndFilterFinder); }
@Test public void toElementFinder__should_return_true_for_XPath_if_tag_is_universalSelector() { // given CssTagNameSelector tagNameSelector = new CssTagNameSelector("*"); // when ElementFinder elementFinder = tagNameSelector.toElementFinder(createWebDriverDummy()); // then assertThat(elementFinder.getXPathExpression(), is(".//*[true()]")); }
@Override public List<WebElement> findElements(SearchContext context, String selector) { CssSelectorList cssSelectorList = ParseTreeBuilder.parse(selector); return cssSelectorList.stream() .flatMap(cssSelector -> cssSelector.toElementFinder((WebDriver) context).findWebElements(context).stream()) .collect(Collectors.toList()); }
@Override default ElementFinder toElementFinder(ElementFinder leftFinder) { WebDriver webDriver = leftFinder.getWebDriver(); if (isThisCSSPseudoClassNativelySupportedOn(webDriver)) { return __createFinderForNativelySupportedPseudo(leftFinder, webDriver); } else { return __createFinderForUnsupportedPseudo(leftFinder, webDriver); } }
public static void assertPseudoClassHasFinder(CssCondition pseudoClassObject, ElementFinder previous, String expectedCss, boolean canPureCss, String expectedXPath, Matcher<? super List<ElementFilter>> elementFilterMatcher) { // given // arguments // when ElementFinder elementFinder = pseudoClassObject.toElementFinder(previous); // then assertEquals("CSS selector", expectedCss, elementFinder.toCssString()); assertEquals("Can pure CSS?", canPureCss, elementFinder.canFetchThroughCssAlone()); assertEquals("XPath Expression", expectedXPath, elementFinder.getXPathExpression()); assertThat("ElementFilterList", elementFinder.getElementFilterList().getElementFilters(), elementFilterMatcher); }
default ElementFinder __createFinderForUnsupportedPseudo(ElementFinder leftFinder, WebDriver webDriver) { return new ElementFinder( webDriver, CSS_NOT_NATIVELY_SUPPORTED, leftFinder.getXPathAndFilterFinder().merge(toXPath(webDriver), xPathMergeStrategy()) ); }
public ElementFinder(CssFinder newCssSelector, String newXPathExpression, ElementFinder previous) { this(previous.webDriver, newCssSelector, previous.getXPathAndFilterFinder().newXPathExpressionKeepingEverythingElse(newXPathExpression)); }
private String toChainedNotSelectors(WebDriver webDriver) { return astCssNotPseudoClass.getArgument().stream() .map(cssSelector -> ":" + PSEUDO_PURE_NOT + "(" + cssSelector.toElementFinder(webDriver).toCssString() + ")") .collect(Collectors.joining()); }
@Override public ElementFinder toElementFinder(WebDriver webDriver) { XPathAndFilterFinder xPathAndFilterFinder = new XPathAndFilterFinder(toXPath(), ElementFilterList.FILTER_NOTHING_LIST) { @Override public String getXPathExpression() { return ".//*[" + getRawXPathExpression() + "]"; } }; return new ElementFinder(webDriver, toCSS(), xPathAndFilterFinder); }
@Override public List<WebElement> findElements(SearchContext context, String selector) { CssSelectorList cssSelectorList = ParseTreeBuilder.parse(selector); return cssSelectorList.stream() .flatMap(cssSelector -> cssSelector.toElementFinder((WebDriver) context).findWebElements(context).stream()) .collect(Collectors.toList()); }
@Override default ElementFinder toElementFinder(ElementFinder leftFinder) { WebDriver webDriver = leftFinder.getWebDriver(); if (isThisCSSPseudoClassNativelySupportedOn(webDriver)) { return __createFinderForNativelySupportedPseudo(leftFinder, webDriver); } else { return __createFinderForUnsupportedPseudo(leftFinder, webDriver); } }
@Test public void toElementFinder() { // given CssTagNameSelector tagNameSelector = new CssTagNameSelector("myTag"); // when ElementFinder elementFinder = tagNameSelector.toElementFinder(createWebDriverDummy()); // then assertThat(elementFinder.toCssString(), is("myTag")); assertThat(elementFinder.canFetchThroughCssAlone(), is(true)); assertThat(elementFinder.getXPathExpression(), is(".//*[self::myTag]")); assertThat(elementFinder.getElementFilterList().getElementFilters(), empty()); }