@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); }
@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); }
@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); }
@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); }
@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); }
@Override public ElementFinder toElementFinder(ElementFinder leftFinder) { CssFinder combinedCssSelector = leftFinder.getCssFinder().merge(toCSS()); String combinedXPathExp = ElementFinderUtils.conditionalSimpleXPathMerge(leftFinder.getXPathExpression(), toXPath()); return new ElementFinder(combinedCssSelector, combinedXPathExp, leftFinder); }
@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); }
@Override public ElementFinder toElementFinder(ElementFinder leftFinder) { CssFinder combinedCssSelector = leftFinder.getCssFinder().merge(toCSS()); String combinedXPathExp = ElementFinderUtils.conditionalSimpleXPathMerge(leftFinder.getXPathExpression(), toXPath()); return new ElementFinder(combinedCssSelector, combinedXPathExp, leftFinder); }
@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); }
@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 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()]")); }
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 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 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 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()); }
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); }