如何通过硒来检查伪元素是否存在



我需要知道我们是否可以找到之后和之前这样的伪元素的存在

我的目的只是返回真或假,如果它存在的话。

但是不能使用

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 !!
}

相关内容

  • 没有找到相关文章

最新更新