我需要知道我们是否可以找到之后和之前这样的伪元素的存在
我的目的只是返回真或假,如果它存在的话。
但是不能使用
browser.driver.findElements(by.id('id')).size != 0
或
return !driver.findElements(by).isEmpty();
因为它们是psuedo元素,不能通过任何CS或XPATH定位器定位
这是我的HTML有::之后
<div class="parent-class">
<span class="child-class">Archive
::after
</span>
::after
</div>
这是我的HTML,在之后没有:
<div class="parent-class">
<span class="child-class">Archive
::after
</span>
</div>
注意:我只需要验证DIV标签中的::after,但不需要验证SPAN标签
是的,伪元素不能通过路径或CSS定位器定位。但是,作为替代方案,您可以提取父元素的内部HTML,并验证它是否包含"::after"文本。
有两种方法可以做到这一点。对于上述场景,
WebElement element = browser.driver.findElement(By.className('parent-class'))
String innerHTMLText = element.getAttribute('innerHTML');
if (innerHTMLText.contains("::after")){
// Bingo !!
}
否则
WebElement element = browser.driver.findElement(By.className('parent-class'))
JavascriptExecutor js = (JavascriptExecutor)driver;
String innerHTMLText = js.executeScript("return arguments[0].innerHTML;", element);
if (innerHTMLText.contains("::after")){
// Bingo !!
}
编辑1
如果您需要验证是否只有div标记具有伪元素,您可以获取span标记的HTML,获取父标记的HTML以及从父标记的HTML中删除span标记内部HTML。验证
String divHTMLText = browser.driver.findElement(By.className('parent-class')).getAttribute('innerHTML');
String spanHTMLText = browser.driver.findElement(By.className('child-class')).getAttribute('innerHTML');
// replace all the whitespaces first for good measure
divHTMLText = divHTMLText.replaceAll("\s+","")
spanHTMLText = spanHTMLText.replaceAll("\s+","")
// replace the child html from parent's html with empty. which leaves us with the parent html code.
String divOnlyHTML = divHTMLText.replace(spanHTMLText, "");
if (divOnlyHTML.contains("::after")){
// Bingo !!
}