/** * Merges two CSS selector parts into one. * The current instance will be the left part of the merged selector. * * @param rightCSS The right part of the merged selector. * @return The two parts merged as a CSS selector. */ public CssFinder merge(CssFinder rightCSS) { if (!rightCSS.canFetchAllElementsOfTheQueryByItself()) { return CSS_NOT_NATIVELY_SUPPORTED; } if (selectorsHaveDifferentTags(this, rightCSS) && noneOfTheTagsIsTheUniversalSelector(this, rightCSS)) { // TODO throw custom exception here, catch somewhere above so we can warn the user about useless selectors (not fail silently like jQuery) throw new IllegalArgumentException("The attempted selector has two element (tag) selectors at the same level. " + "It is incorrect and would never fetch any elements (as no element has more than one tag)."); } if (this.hasUniversalSelector()) { return new CssFinder( this.getLeftPart(), rightCSS.getTag(), this.getRightPart() + rightCSS.getRightPart() ); } else { return new CssFinder( this.getLeftPart(), this.getTag(), this.getRightPart() + rightCSS.getRightPart() ); } }
private CssFinder toCSS() { return fromTag(this.tagName); }
public CssFinder combineAsLeftPart(String combinator) { if (this.canFetchAllElementsOfTheQueryByItself()) { return new CssFinder(this.toString() + combinator, UNIVERSAL_SELECTOR, ""); } return CSS_NOT_NATIVELY_SUPPORTED; }
@Test public void cssMerge__should_remove_asterisk() { CssFinder mergedCss = universalSelector().merge(new CssFinder(".clz")); assertThat(mergedCss.toString(), is(".clz")); }
@Override public CssFinder toCssWhenNativelySupported(WebDriver webDriver) { return new CssFinder(ENABLED_PSEUDO); }
@Override public ElementFinder toElementFinder(ElementFinder leftFinder) { CssFinder newCssSelector = leftFinder.getCssFinder().merge(toCSS()); String newXPathExpression = ElementFinderUtils.conditionalSimpleXPathMerge(leftFinder.getXPathExpression(), toXPath()); return new ElementFinder(newCssSelector, newXPathExpression, leftFinder); }
@Test public void cssMerge__when_merging_to_NULL_OBJECT_should_return_NULL_OBJECT2() { CssFinder mergedCss = CssFinder.CSS_NOT_NATIVELY_SUPPORTED.merge(universalSelector()); assertThat(mergedCss, is(CssFinder.CSS_NOT_NATIVELY_SUPPORTED)); }
public String toCssString() { return cssFinder.toString(); }
@Override public CssFinder toCssWhenNativelySupported(WebDriver webDriver) { return CssFinder.universalSelector(); }
public List<WebElement> findWebElements(SearchContext context) { if (canFetchThroughCssAlone()) { return cssFinder.findElements(context); } return xPathAndFilterFinder.findElements(context); }
@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 boolean canFetchThroughCssAlone() { return cssFinder.canFetchAllElementsOfTheQueryByItself(); }
@Override public CssFinder toCssWhenNativelySupported(WebDriver webDriver) { return new CssFinder("input", "[type=\"" + typeAttributeValue + "\"]"); }
@Override public ElementFinder toElementFinder(ElementFinder leftFinder) { CssFinder newCssSelector = leftFinder.getCssFinder().merge(toCSS()); String newXPathExpression = ElementFinderUtils.conditionalSimpleXPathMerge(leftFinder.getXPathExpression(), toXPath()); return new ElementFinder(newCssSelector, newXPathExpression, leftFinder); }
@Test public void cssMerge__when_merging_to_NULL_OBJECT_should_return_NULL_OBJECT() { CssFinder mergedCss = universalSelector().merge(CssFinder.CSS_NOT_NATIVELY_SUPPORTED); assertThat(mergedCss, is(CssFinder.CSS_NOT_NATIVELY_SUPPORTED)); }
public String toCssString() { return cssFinder.toString(); }