public UnsupportedPseudoClassException(ArgumentMap argumentMap, SimpleSelector selectorUpToThisPoint, String pseudoClassValue) { this(new PseudoClassSelector(argumentMap, selectorUpToThisPoint, pseudoClassValue).getOriginalPseudoClassSelector()); }
@Override public boolean isPseudoClass(WebDriver driver, WebElement element, PseudoClassSelector pseudoClassSelector) { TagComponent compiledSelector = XPathComponentCompilerService.compileSelector(pseudoClassSelector.getArgumentMap(), pseudoClassSelector.getSelector()); List<WebElement> elements = compiledSelector.findWebElements(driver); return elements.indexOf(element) % 2 == 1; }
String getOriginalPseudoClassSelector() { String pseudoClassBracesContent = getPseudoClassContent(); String rawUsupportedSelector = ":"+getPseudoClass(); if (pseudoClassBracesContent != null) { rawUsupportedSelector = ":"+getPseudoClass()+"("+pseudoClassBracesContent+")"; } return rawUsupportedSelector; }
@Override public boolean isPseudoClass(WebDriver driver, WebElement element, PseudoClassSelector pseudoClassSelector) { String ltIndex = pseudoClassSelector.getPseudoClassContent(); if (!ltIndex.matches("[+-]?\\d+")) { throw new RuntimeException("The :lt() pseudo-class requires an integer but got: " + ltIndex); } if (ltIndex.charAt(0) == '+') { ltIndex = ltIndex.substring(1); } int index = Integer.parseInt(ltIndex); return LtPseudoClass.isLt(driver, element, pseudoClassSelector, index); }
@Override public boolean isCondition(WebDriver driver, WebElement element, ArgumentMap argumentMap, Selector selectorUpToThisPoint, AttributeCondition attributeCondition) { String pseudoClassValue = attributeCondition.getValue(); for (PseudoClass pseudoClass : pseudoClasses) { if (pseudoClass.isApplicable(pseudoClassValue)) { return pseudoClass.isPseudoClass(driver, element, new PseudoClassSelector(argumentMap, selectorUpToThisPoint, pseudoClassValue)); } } System.err.println("Warning: Unsupported pseudo-class: " + pseudoClassValue); return false; }
@Override public boolean isPseudoClass(WebDriver driver, WebElement element, PseudoClassSelector pseudoClassSelector) { String wantedLang = pseudoClassSelector.getPseudoClassContent(); return wantedLang.equals(SelectorUtils.lang(element)); }
@Override public boolean isCondition(WebDriver driver, WebElement element, ArgumentMap argumentMap, Selector selectorUpToThisPoint, AttributeCondition attributeCondition) { String pseudoClassValue = attributeCondition.getValue(); for (PseudoClass pseudoClass : pseudoClasses) { if (pseudoClass.isApplicable(pseudoClassValue)) { return pseudoClass.isPseudoClass(driver, element, new PseudoClassSelector(argumentMap, selectorUpToThisPoint, pseudoClassValue)); } } System.err.println("Warning: Unsupported pseudo-class: " + pseudoClassValue); return false; }
@Override public boolean isPseudoClass(WebDriver driver, WebElement element, PseudoClassSelector pseudoClassSelector) { TagComponent compiledSelector = XPathComponentCompilerService.compileSelector(pseudoClassSelector.getArgumentMap(), pseudoClassSelector.getSelector()); List<WebElement> elements = compiledSelector.findWebElements(driver); return elements.indexOf(element) % 2 == 1; }
@Override public boolean isPseudoClass(WebDriver driver, WebElement element, PseudoClassSelector pseudoClassSelector) { String wantedLang = pseudoClassSelector.getPseudoClassContent(); return wantedLang.equals(SelectorUtils.lang(element)); }
public UnsupportedPseudoClassException(ArgumentMap argumentMap, SimpleSelector selectorUpToThisPoint, String pseudoClassValue) { this(new PseudoClassSelector(argumentMap, selectorUpToThisPoint, pseudoClassValue).getOriginalPseudoClassSelector()); }
String getOriginalPseudoClassSelector() { String pseudoClassBracesContent = getPseudoClassContent(); String rawUsupportedSelector = ":"+getPseudoClass(); if (pseudoClassBracesContent != null) { rawUsupportedSelector = ":"+getPseudoClass()+"("+pseudoClassBracesContent+")"; } return rawUsupportedSelector; }
@Override public boolean isPseudoClass(WebDriver driver, WebElement element, PseudoClassSelector pseudoClassSelector) { TagComponent compiledSelector = XPathComponentCompilerService.compileSelector(pseudoClassSelector.getArgumentMap(), pseudoClassSelector.getSelector()); List<WebElement> elements = compiledSelector.findWebElements(driver); return elements.indexOf(element) % 2 == 0; }
@Override public ConditionSimpleComponent pseudoClassToXPath(PseudoClassSelector pseudoClassSelector) { String wantedLang = pseudoClassSelector.getPseudoClassContent(); return new ConditionSimpleComponent("[ancestor-or-self::*[@lang][1]/@lang = '" + wantedLang + "']"); }
@Override public ConditionComponent conditionToXPath(ArgumentMap argumentMap, Selector selectorUpToThisPoint, AttributeCondition attributeCondition) { String pseudoClassValue = attributeCondition.getValue(); for (PseudoClass pseudoClass : pseudoClasses) { if (pseudoClass.isApplicable(pseudoClassValue)) { return pseudoClass.pseudoClassToXPath(new PseudoClassSelector(argumentMap, selectorUpToThisPoint, pseudoClassValue)); } } PseudoClassSelector pseudoClassSelector = new PseudoClassSelector(argumentMap, selectorUpToThisPoint, pseudoClassValue); // right now we'll just exit, hoping to cause less problems throw new UnsupportedPseudoClassException(pseudoClassSelector.getOriginalPseudoClassSelector()); }
static boolean isEq(WebDriver driver, WebElement element, PseudoClassSelector pseudoClassSelector, int index) { TagComponent compiledSelector = XPathComponentCompilerService.compileSelector(pseudoClassSelector.getArgumentMap(), pseudoClassSelector.getSelector()); List<WebElement> elements = compiledSelector.findWebElements(driver); if (index < 0) { return elements.size() >= -index && elements.get(elements.size() + index).equals(element); } return elements.size() > index && elements.get(index).equals(element); }
@Override public boolean isPseudoClass(WebDriver driver, WebElement element, PseudoClassSelector pseudoClassSelector) { String gtIndex = pseudoClassSelector.getPseudoClassContent(); if (!gtIndex.matches("[+-]?\\d+")) { throw new RuntimeException("The :gt() pseudo-class requires an integer but got: " + gtIndex); } if (gtIndex.charAt(0) == '+') { gtIndex = gtIndex.substring(1); } int index = Integer.parseInt(gtIndex); return GtPseudoClass.isGt(driver, element, pseudoClassSelector, index); }
@Override public ConditionComponent conditionToXPath(ArgumentMap argumentMap, Selector selectorUpToThisPoint, AttributeCondition attributeCondition) { String pseudoClassValue = attributeCondition.getValue(); for (PseudoClass pseudoClass : pseudoClasses) { if (pseudoClass.isApplicable(pseudoClassValue)) { return pseudoClass.pseudoClassToXPath(new PseudoClassSelector(argumentMap, selectorUpToThisPoint, pseudoClassValue)); } } PseudoClassSelector pseudoClassSelector = new PseudoClassSelector(argumentMap, selectorUpToThisPoint, pseudoClassValue); // right now we'll just exit, hoping to cause less problems throw new UnsupportedPseudoClassException(pseudoClassSelector.getOriginalPseudoClassSelector()); }
static boolean isEq(WebDriver driver, WebElement element, PseudoClassSelector pseudoClassSelector, int index) { TagComponent compiledSelector = XPathComponentCompilerService.compileSelector(pseudoClassSelector.getArgumentMap(), pseudoClassSelector.getSelector()); List<WebElement> elements = compiledSelector.findWebElements(driver); if (index < 0) { return elements.size() >= -index && elements.get(elements.size() + index).equals(element); } return elements.size() > index && elements.get(index).equals(element); }
@Override public boolean isPseudoClass(WebDriver driver, WebElement element, PseudoClassSelector pseudoClassSelector) { String textToContain = pseudoClassSelector.getPseudoClassContent(); textToContain = SelectorUtils.unescapeString(textToContain); return element.getText().contains(textToContain); }
@Override public boolean isPseudoClass(WebDriver driver, WebElement element, PseudoClassSelector pseudoClassSelector) { TagComponent compiledSelector = XPathComponentCompilerService.compileSelector(pseudoClassSelector.getArgumentMap(), pseudoClassSelector.getSelector()); List<WebElement> elements = compiledSelector.findWebElements(driver); return elements.indexOf(element) % 2 == 0; }