public static WebElement closest(WebDriver driver, WebElement element, String selector) { WebElement ancestorOrSelf = element; // begins by evaluating the element itself while (ancestorOrSelf != null) { if (CssSelectorMatcherService.elementMatchesStringSelector(driver, ancestorOrSelf, selector)) { return ancestorOrSelf; } ancestorOrSelf = SelectorUtils.parent(ancestorOrSelf); } // if ancestorOrSelf is null, it reached document root, // so no ancestor matching the selector was found return null; }
public static boolean elementMatchesStringSelector(WebDriver driver, WebElement element, String selector) { W3cCssSelectorListWithMap cssParsedSelectors = W3cCssSelectorWithMapParser.parseSelector(selector); for (W3cCssSelectorWithMap w3cCssSelectorWithMap : cssParsedSelectors) { if (elementMatchesSelector(driver, element, w3cCssSelectorWithMap)) { return true; } } return false; }
public static WebElement closest(WebDriver driver, WebElement element, String selector) { WebElement ancestorOrSelf = element; // begins by evaluating the element itself while (ancestorOrSelf != null) { if (CssSelectorMatcherService.elementMatchesStringSelector(driver, ancestorOrSelf, selector)) { return ancestorOrSelf; } ancestorOrSelf = SelectorUtils.parent(ancestorOrSelf); } // if ancestorOrSelf is null, it reached document root, // so no ancestor matching the selector was found return null; }
public static boolean elementMatchesStringSelector(WebDriver driver, WebElement element, String selector) { W3cCssSelectorListWithMap cssParsedSelectors = W3cCssSelectorWithMapParser.parseSelector(selector); for (W3cCssSelectorWithMap w3cCssSelectorWithMap : cssParsedSelectors) { if (elementMatchesSelector(driver, element, w3cCssSelectorWithMap)) { return true; } } return false; }
@Override public boolean isPseudoClass(WebDriver driver, WebElement element, PseudoClassSelector pseudoClassSelector) { String notSelector = pseudoClassSelector.getPseudoClassContent(); return !CssSelectorMatcherService.elementMatchesStringSelector(driver, element, notSelector); }
private boolean elementMatchesDescendantSelector(WebDriver driver, WebElement element, DescendantSelector descendantSelector, ArgumentMap argumentMap) { return CssSelectorMatcherService.elementMatchesSelector(driver, element, argumentMap, descendantSelector.getSimpleSelector()); }
@Override public boolean isPseudoClass(WebDriver driver, WebElement element, PseudoClassSelector pseudoClassSelector) { String notSelector = pseudoClassSelector.getPseudoClassContent(); return !CssSelectorMatcherService.elementMatchesStringSelector(driver, element, notSelector); }
private boolean elementMatchesDescendantSelector(WebDriver driver, WebElement element, DescendantSelector descendantSelector, ArgumentMap argumentMap) { return CssSelectorMatcherService.elementMatchesSelector(driver, element, argumentMap, descendantSelector.getSimpleSelector()); }
public static SeleniumQueryObject children(SeleniumQueryObject caller, String selector) { List<WebElement> elements = caller.get(); WebDriver webDriver = caller.getWebDriver(); List<WebElement> children = getChildren(elements); for (Iterator<WebElement> iterator = children.iterator(); iterator.hasNext();) { WebElement child = iterator.next(); if (!CssSelectorMatcherService.elementMatchesStringSelector(webDriver, child, selector)) { iterator.remove(); } } return SqObjectFactory.instance().createWithInvalidSelector(webDriver, children, caller); }
private boolean parentMatchesAncestorSelector(WebDriver driver, WebElement parent, DescendantSelector descendantSelector, ArgumentMap argumentMap) { return CssSelectorMatcherService.elementMatchesSelector(driver, parent, argumentMap, descendantSelector.getAncestorSelector()); }
public static SeleniumQueryObject children(SeleniumQueryObject caller, String selector) { List<WebElement> elements = caller.get(); WebDriver webDriver = caller.getWebDriver(); List<WebElement> children = getChildren(elements); for (Iterator<WebElement> iterator = children.iterator(); iterator.hasNext();) { WebElement child = iterator.next(); if (!CssSelectorMatcherService.elementMatchesStringSelector(webDriver, child, selector)) { iterator.remove(); } } return SqObjectFactory.instance().createWithInvalidSelector(webDriver, children, caller); }
private boolean parentMatchesAncestorSelector(WebDriver driver, WebElement parent, DescendantSelector descendantSelector, ArgumentMap argumentMap) { return CssSelectorMatcherService.elementMatchesSelector(driver, parent, argumentMap, descendantSelector.getAncestorSelector()); }
@Test(expected= SeleniumQueryException.class) public void attribute_equals_unquoted_space_is_not_valid() { WebElement myA = driver.findElement(By.id("myA")); CssSelectorMatcherService.elementMatchesStringSelector(driver, myA, "a[rel=nofollow self]"); // should throw exception }
@Override public boolean is(WebDriver driver, WebElement element, ArgumentMap argumentMap, DescendantSelector descendantSelector) { if (CssSelectorMatcherService.elementMatchesSelector(driver, element, argumentMap, descendantSelector.getSimpleSelector())) { WebElement ancestor = SelectorUtils.parent(element); while (ancestor != null) { if (CssSelectorMatcherService.elementMatchesSelector(driver, ancestor, argumentMap, descendantSelector.getAncestorSelector())) { return true; } ancestor = SelectorUtils.parent(ancestor); } } return false; }
@Test public void attribute_equals() { WebElement myA = driver.findElement(By.id("myA")); WebElement myA2 = driver.findElement(By.id("myA2")); assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, myA, "a[rel=\"nofollow self\"]"), is(true)); assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, myA, "a[rel='nofollow self']"), is(true)); assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, myA2, "a[hreflang=en]"), is(true)); assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, myA, "a[attrDOESnotExist=yay]"), is(false)); // case INsensitive assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, myA, "a[rEL='noFOLLow sELf']"), is(true)); }
@Override public boolean is(WebDriver driver, WebElement element, ArgumentMap argumentMap, DescendantSelector descendantSelector) { if (CssSelectorMatcherService.elementMatchesSelector(driver, element, argumentMap, descendantSelector.getSimpleSelector())) { WebElement ancestor = SelectorUtils.parent(element); while (ancestor != null) { if (CssSelectorMatcherService.elementMatchesSelector(driver, ancestor, argumentMap, descendantSelector.getAncestorSelector())) { return true; } ancestor = SelectorUtils.parent(ancestor); } } return false; }
@Test public void attribute_not_equals() { WebElement myA = driver.findElement(By.id("myA")); WebElement myA2 = driver.findElement(By.id("myA2")); assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, myA, "a[rel!=\"nofollow self\"]"), is(false)); assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, myA, "a[rel!='nofollow self']"), is(false)); assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, myA2, "a[hreflang!=en]"), is(false)); assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, myA, "a[attrDOESnotExist!=yay]"), is(true)); // case INsensitive assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, myA, "a[rEL!='noFOLLow sELf']"), is(false)); }
@Override public boolean is(WebDriver driver, WebElement element, ArgumentMap argumentMap, SiblingSelector siblingSelector) { WebElement previousElement = SelectorUtils.getPreviousSibling(element); return aPreviousElementExists(previousElement) && elementMatchesSelector(driver, previousElement, argumentMap, siblingSelector.getSelector()) && elementMatchesSelector(driver, element, argumentMap, siblingSelector.getSiblingSelector()); }
@Test public void className_and_id() { WebElement span = driver.findElement(By.tagName("span")); assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, span, ".someClass"), is(false)); assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, driver.findElement(By.id("d1")), ".one"), is(true)); assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, driver.findElement(By.id("d2")), ".one"), is(true)); assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, driver.findElement(By.id("d3")), ".one"), is(true)); assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, driver.findElement(By.id("d4")), ".one"), is(true)); assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, driver.findElement(By.id("d5")), ".one"), is(true)); assertThat(CssSelectorMatcherService.elementMatchesStringSelector(driver, driver.findElement(By.id("d6")), ".one"), is(true)); }
@Override public boolean is(WebDriver driver, WebElement element, ArgumentMap argumentMap, SiblingSelector siblingSelector) { WebElement previousElement = SelectorUtils.getPreviousSibling(element); return aPreviousElementExists(previousElement) && elementMatchesSelector(driver, previousElement, argumentMap, siblingSelector.getSelector()) && elementMatchesSelector(driver, element, argumentMap, siblingSelector.getSiblingSelector()); }