@Override public CssCondition visit(AstCssClassAttributeCondition astCssClassAttributeCondition) { return new CssClassAttributeCondition(astCssClassAttributeCondition); }
@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() { // 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()); }
@Override public CssClassAttributeCondition verifyTranslation(String actualSelector, String expectedClassName) { // given // selector arg // when CssClassAttributeCondition cssCondition = parseAndAssertFirstCssCondition(prefix + actualSelector, CssClassAttributeCondition.class); // then assertThat(cssCondition.getClassName(), is(expectedClassName)); return cssCondition; } }
@Test public void translate__simple_condition() { // given String simpleConditionSelector = "a.condition"; // when CssSelector cssSelector = ParseTreeBuilder.parse(simpleConditionSelector).firstSelector(); // then assertThat(cssSelector, instanceOf(CssConditionalSelector.class)); CssSelector sqCssSelector = ((CssConditionalSelector) cssSelector).getCssSelector(); CssCondition cssCondition = ((CssConditionalSelector) cssSelector).getCssCondition(); assertThat(sqCssSelector, instanceOf(CssTagNameSelector.class)); assertThat(((CssTagNameSelector) sqCssSelector).getTagName(), is("a")); assertThat(cssCondition, instanceOf(CssClassAttributeCondition.class)); assertThat(((CssClassAttributeCondition) cssCondition).getClassName(), is("condition")); }
@Override public CssCondition visit(AstCssClassAttributeCondition astCssClassAttributeCondition) { return new CssClassAttributeCondition(astCssClassAttributeCondition); }
@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 translate__compound_condition() { // given String compoundConditionSelector = "a.conditionA.conditionB"; // when CssSelector cssSelector = ParseTreeBuilder.parse(compoundConditionSelector).firstSelector(); // then assertThat(cssSelector, instanceOf(CssConditionalSelector.class)); CssSelector sqCssSelector = ((CssConditionalSelector) cssSelector).getCssSelector(); CssCondition cssCondition = ((CssConditionalSelector) cssSelector).getCssCondition(); assertThat(sqCssSelector, instanceOf(CssTagNameSelector.class)); assertThat(((CssTagNameSelector) sqCssSelector).getTagName(), is("a")); assertThat(cssCondition, instanceOf(CssAndCondition.class)); CssCondition sqCssFirstCondition = ((CssAndCondition) cssCondition).getFirstCondition(); CssCondition sqCssSecondCondition = ((CssAndCondition) cssCondition).getSecondCondition(); assertThat(sqCssFirstCondition, instanceOf(CssClassAttributeCondition.class)); assertThat(((CssClassAttributeCondition) sqCssFirstCondition).getClassName(), is("conditionA")); assertThat(sqCssSecondCondition, instanceOf(CssClassAttributeCondition.class)); assertThat(((CssClassAttributeCondition) sqCssSecondCondition).getClassName(), is("conditionB")); }
@Test public void toElementFinder() { // given CssTagNameSelector tagNameSelector = new CssTagNameSelector("tagg"); CssClassAttributeCondition classAttributeCondition = new CssClassAttributeCondition(new AstCssClassAttributeCondition("clz")); // tagg.clz CssConditionalSelector conditionalSelector = new CssConditionalSelector(tagNameSelector, classAttributeCondition); // when ElementFinder elementFinder = conditionalSelector.toElementFinder(createWebDriverDummy()); // then assertThat(elementFinder.toCssString(), is("tagg.clz")); assertThat(elementFinder.canFetchThroughCssAlone(), is(true)); assertThat(elementFinder.getXPathExpression(), is(".//*[self::tagg and contains(concat(' ', normalize-space(@class), ' '), ' clz ')]")); assertThat(elementFinder.getElementFilterList().getElementFilters(), empty()); }
@Test public void translate_with_condition() { // given CssSelector cssSelector = ParseTreeBuilder.parse("a b.condition").firstSelector(); assertThat(cssSelector, instanceOf(CssDescendantSelector.class)); // when CssSelector ancestorSelector = ((CssDescendantSelector) cssSelector).getAncestorSelector(); CssSelector descendantSelector = ((CssDescendantSelector) cssSelector).getDescendantSelector(); // then assertThat(ancestorSelector, instanceOf(CssTagNameSelector.class)); assertThat(((CssTagNameSelector) ancestorSelector).getTagName(), is("a")); assertThat(descendantSelector, instanceOf(CssConditionalSelector.class)); CssSelector sqCssSelector = ((CssConditionalSelector) descendantSelector).getCssSelector(); CssCondition cssCondition = ((CssConditionalSelector) descendantSelector).getCssCondition(); assertThat(sqCssSelector, instanceOf(CssTagNameSelector.class)); assertThat(((CssTagNameSelector) sqCssSelector).getTagName(), is("b")); assertThat(cssCondition, instanceOf(CssClassAttributeCondition.class)); assertThat(((CssClassAttributeCondition) cssCondition).getClassName(), is("condition")); }
@Test public void toElementFinder__with_ElementFinder_arg() { // given CssTagNameSelector aTagSelector = new CssTagNameSelector("a"); CssTagNameSelector bTagSelector = new CssTagNameSelector("b"); CssClassAttributeCondition classAttributeCondition = new CssClassAttributeCondition(new AstCssClassAttributeCondition("condition")); CssConditionalSelector conditionalSelector = new CssConditionalSelector(bTagSelector, classAttributeCondition); // a b.condition CssDescendantSelector descendantSelector = new CssDescendantSelector(aTagSelector, conditionalSelector); // when ElementFinder elementFinder = descendantSelector.toElementFinder(createWebDriverDummy()); // then assertThat(elementFinder.toCssString(), is("a b.condition")); assertThat(elementFinder.canFetchThroughCssAlone(), is(true)); assertThat(elementFinder.getXPathExpression(), is(".//*[self::a]//*[self::b and contains(concat(' ', normalize-space(@class), ' '), ' condition ')]")); 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()); }