public List<WebElement> findWebElements(SearchContext context) { if (canFetchThroughCssAlone()) { return cssFinder.findElements(context); } return xPathAndFilterFinder.findElements(context); }
public List<WebElement> findWebElements(SearchContext context) { if (canFetchThroughCssAlone()) { return cssFinder.findElements(context); } return xPathAndFilterFinder.findElements(context); }
@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()); }
@Test public void toElementFinder__with_two_ands() { // given String tagClassClassSelector = "span.a.b"; CssSelector tagAndClassAndClassCondition = ParseTreeBuilder.parse(tagClassClassSelector).firstSelector(); // when ElementFinder elementFinder = tagAndClassAndClassCondition.toElementFinder(UNIVERSAL_SELECTOR_FINDER); // then assertThat(elementFinder.toCssString(), is(tagClassClassSelector)); assertThat(elementFinder.canFetchThroughCssAlone(), is(true)); assertThat(elementFinder.getXPathExpression(), is(".//*[self::span and contains(concat(' ', normalize-space(@class), ' '), ' a ') and contains(concat(' ', normalize-space(@class), ' '), ' b ')]")); assertThat(elementFinder.getElementFilterList().getElementFilters(), empty()); }
@Test public void toElementFinder() { // given CssContainsPrefixAttributeCondition containsPrefixAttributeCondition = new CssContainsPrefixAttributeCondition(new AstCssContainsPrefixAttributeCondition("hreflang", "en")); ElementFinder previous = ElementFinderUtilsTest.UNIVERSAL_SELECTOR_FINDER; // when ElementFinder elementFinder = containsPrefixAttributeCondition.toElementFinder(previous); // then assertThat(elementFinder.toCssString(), is("[hreflang|='en']")); assertThat(elementFinder.canFetchThroughCssAlone(), is(true)); String hreflang = "@*[translate(name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'hreflang']"; assertThat(elementFinder.getXPathExpression(), is(String.format(".//*[(%s = 'en' or starts-with(%s, 'en-'))]", hreflang, hreflang))); assertThat(elementFinder.getElementFilterList().getElementFilters(), empty()); }
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 toElementFinder() { // given CssStartsWithAttributeCondition startsWithAttributeCondition = new CssStartsWithAttributeCondition(new AstCssStartsWithAttributeCondition("attribute", "stringToStart")); ElementFinder previous = ElementFinderUtilsTest.UNIVERSAL_SELECTOR_FINDER; // when ElementFinder elementFinder = startsWithAttributeCondition.toElementFinder(previous); // then assertThat(elementFinder.toCssString(), is("[attribute^='stringToStart']")); assertThat(elementFinder.canFetchThroughCssAlone(), is(true)); String attrName = "@*[translate(name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'attribute']"; assertThat(elementFinder.getXPathExpression(), is(".//*[starts-with("+attrName+", 'stringToStart')]")); assertThat(elementFinder.getElementFilterList().getElementFilters(), empty()); }
@Test public void toElementFinder() { // given CssClassAttributeCondition classAttributeCondition = new CssClassAttributeCondition(new AstCssClassAttributeCondition("clazz")); ElementFinder previous = ElementFinderUtilsTest.UNIVERSAL_SELECTOR_FINDER; // when ElementFinder elementFinder = classAttributeCondition.toElementFinder(previous); // then assertThat(elementFinder.toCssString(), is(".clazz")); assertThat(elementFinder.canFetchThroughCssAlone(), is(true)); assertThat(elementFinder.getXPathExpression(), is(".//*[contains(concat(' ', normalize-space(@class), ' '), ' clazz ')]")); assertThat(elementFinder.getElementFilterList().getElementFilters(), empty()); }
@Test public void toElementFinder__has_attribute() { // given CssEqualsOrHasAttributeCondition hasAttributeCondition = new CssEqualsOrHasAttributeCondition(new AstCssEqualsOrHasAttributeCondition("attrib")); ElementFinder previous = ElementFinderUtilsTest.UNIVERSAL_SELECTOR_FINDER; // when ElementFinder elementFinder = hasAttributeCondition.toElementFinder(previous); // then assertThat(elementFinder.toCssString(), is("[attrib]")); assertThat(elementFinder.canFetchThroughCssAlone(), is(true)); assertThat(elementFinder.getXPathExpression(), is(".//*[@*[translate(name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'attrib']]")); assertThat(elementFinder.getElementFilterList().getElementFilters(), empty()); }
@Test public void toElementFinder__equals_attribute() { // given CssEqualsOrHasAttributeCondition hasAttributeCondition = new CssEqualsOrHasAttributeCondition(new AstCssEqualsOrHasAttributeCondition("attrib", "valz")); ElementFinder previous = ElementFinderUtilsTest.UNIVERSAL_SELECTOR_FINDER; // when ElementFinder elementFinder = hasAttributeCondition.toElementFinder(previous); // then assertThat(elementFinder.toCssString(), is("[attrib='valz']")); assertThat(elementFinder.canFetchThroughCssAlone(), is(true)); assertThat(elementFinder.getXPathExpression(), is(".//*[@*[translate(name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'attrib']='valz']")); assertThat(elementFinder.getElementFilterList().getElementFilters(), empty()); }
@Test public void toElementFinder() { // given CssIdAttributeCondition idAttributeCondition = new CssIdAttributeCondition(new AstCssIdAttributeCondition("idz")); ElementFinder previous = ElementFinderUtilsTest.UNIVERSAL_SELECTOR_FINDER; // when ElementFinder elementFinder = idAttributeCondition.toElementFinder(previous); // then assertThat(elementFinder.toCssString(), is("#idz")); assertThat(elementFinder.canFetchThroughCssAlone(), is(true)); assertThat(elementFinder.getXPathExpression(), is(".//*[@id = 'idz']")); assertThat(elementFinder.getElementFilterList().getElementFilters(), empty()); }
@Test public void toElementFinder() { // given CssContainsSubstringAttributeCondition containsSubstringAttributeCondition = new CssContainsSubstringAttributeCondition(new AstCssContainsSubstringAttributeCondition("attribute", "stringToContain")); ElementFinder previous = ElementFinderUtilsTest.UNIVERSAL_SELECTOR_FINDER; // when ElementFinder elementFinder = containsSubstringAttributeCondition.toElementFinder(previous); // then assertThat(elementFinder.toCssString(), is("[attribute*='stringToContain']")); assertThat(elementFinder.canFetchThroughCssAlone(), is(true)); String attrName = "@*[translate(name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'attribute']"; assertThat(elementFinder.getXPathExpression(), is(".//*[contains(" + attrName + ", 'stringToContain')]")); assertThat(elementFinder.getElementFilterList().getElementFilters(), empty()); }
@Test public void toElementFinder() { // given CssTagNameSelector aTagSelector = new CssTagNameSelector("a"); CssTagNameSelector bTagSelector = new CssTagNameSelector("b"); CssDirectAdjacentSelector directAdjacentSelector = new CssDirectAdjacentSelector(aTagSelector, bTagSelector); // when ElementFinder elementFinder = directAdjacentSelector.toElementFinder(createWebDriverDummy()); // then assertThat(elementFinder.toCssString(), is("a+b")); assertThat(elementFinder.canFetchThroughCssAlone(), is(true)); assertThat(elementFinder.getXPathExpression(), is(".//*[self::a]/following-sibling::*[position() = 1 and self::b]")); assertThat(elementFinder.getElementFilterList().getElementFilters(), empty()); }
@Test public void toElementFinder() { // given CssEndsWithAttributeCondition endsWithAttributeCondition = new CssEndsWithAttributeCondition(new AstCssEndsWithAttributeCondition("attribute", "stringToEnd")); ElementFinder previous = ElementFinderUtilsTest.UNIVERSAL_SELECTOR_FINDER; // when ElementFinder elementFinder = endsWithAttributeCondition.toElementFinder(previous); // then assertThat(elementFinder.toCssString(), is("[attribute$='stringToEnd']")); assertThat(elementFinder.canFetchThroughCssAlone(), is(true)); String attrName = "@*[translate(name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'attribute']"; assertThat(elementFinder.getXPathExpression(), is(".//*[substring("+attrName+", string-length("+attrName+")-10) = 'stringToEnd']")); assertThat(elementFinder.getElementFilterList().getElementFilters(), empty()); }
@Test public void toElementFinder() { // given CssContainsWordAttributeCondition containsWordAttributeCondition = new CssContainsWordAttributeCondition(new AstCssContainsWordAttributeCondition("values", "10")); ElementFinder previous = ElementFinderUtilsTest.UNIVERSAL_SELECTOR_FINDER; // when ElementFinder elementFinder = containsWordAttributeCondition.toElementFinder(previous); // then assertThat(elementFinder.toCssString(), is("[values~='10']")); assertThat(elementFinder.canFetchThroughCssAlone(), is(true)); String attrName = "@*[translate(name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'values']"; assertThat(elementFinder.getXPathExpression(), is(".//*[contains(concat(' ', normalize-space("+attrName+"), ' '), ' 10 ')]")); assertThat(elementFinder.getElementFilterList().getElementFilters(), empty()); }
@Test public void toElementFinder() { // given CssTagNameSelector aTagSelector = new CssTagNameSelector("a"); CssTagNameSelector bTagSelector = new CssTagNameSelector("b"); CssGeneralAdjacentSelector generalAdjacentSelector = new CssGeneralAdjacentSelector(aTagSelector, bTagSelector); // when ElementFinder elementFinder = generalAdjacentSelector.toElementFinder(createWebDriverDummy()); // then assertThat(elementFinder.toCssString(), is("a~b")); assertThat(elementFinder.canFetchThroughCssAlone(), is(true)); assertThat(elementFinder.getXPathExpression(), is(".//*[self::a]/following-sibling::*[self::b]")); assertThat(elementFinder.getElementFilterList().getElementFilters(), empty()); }
@Test public void toElementFinder() { // given CssTagNameSelector aTagSelector = new CssTagNameSelector("a"); CssTagNameSelector bTagSelector = new CssTagNameSelector("b"); CssDescendantSelector descendantSelector = new CssDescendantSelector(aTagSelector, bTagSelector); // when ElementFinder elementFinder = descendantSelector.toElementFinder(createWebDriverDummy()); // then assertThat(elementFinder.toCssString(), is("a b")); assertThat(elementFinder.canFetchThroughCssAlone(), is(true)); assertThat(elementFinder.getXPathExpression(), is(".//*[self::a]//*[self::b]")); assertThat(elementFinder.getElementFilterList().getElementFilters(), empty()); }
@Test public void toElementFinder() { // given CssTagNameSelector aTagSelector = new CssTagNameSelector("a"); CssTagNameSelector bTagSelector = new CssTagNameSelector("b"); CssDirectDescendantSelector directDescendantSelector = new CssDirectDescendantSelector(aTagSelector, bTagSelector); // when ElementFinder elementFinder = directDescendantSelector.toElementFinder(createWebDriverDummy()); // then assertThat(elementFinder.toCssString(), is("a>b")); assertThat(elementFinder.canFetchThroughCssAlone(), is(true)); assertThat(elementFinder.getXPathExpression(), is(".//*[self::a]/*[self::b]")); assertThat(elementFinder.getElementFilterList().getElementFilters(), empty()); }
@Test public void toElementFinder() { // given CssIdAttributeCondition idCondition = new CssIdAttributeCondition(new AstCssIdAttributeCondition("my-id")); CssClassAttributeCondition classCondition = new CssClassAttributeCondition(new AstCssClassAttributeCondition("class-name")); CssAndCondition andCondition = new CssAndCondition(new AstCssAndCondition(idCondition, classCondition)); // when ElementFinder elementFinder = andCondition.toElementFinder(UNIVERSAL_SELECTOR_FINDER); // then assertThat(elementFinder.toCssString(), is("#my-id.class-name")); assertThat(elementFinder.canFetchThroughCssAlone(), is(true)); assertThat(elementFinder.getXPathExpression(), is(".//*[@id = 'my-id' and contains(concat(' ', normalize-space(@class), ' '), ' class-name ')]")); assertThat(elementFinder.getElementFilterList().getElementFilters(), empty()); }
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); }