我需要从XPath
中排除元素,其中display: none;
在CSS类中设置。当给定元素有一个CSS类,其中设置了display: none;
时,这里建议的解决方案将不起作用。
在我的具体示例中,该元素有一个名为error result的类,CSS设置为:
.error-result {
display: none;
}
这是我尝试过的XPath:
.//*[contains(text(),'XXXXXX')][not(ancestor::div[contains(@style,'display: none')])][not(descendant::div[contains(@style,'display: none')])]
问题是,Selenium
仍然识别不需要的元素,因为显示:none;仅在CSS类中设置。
如何排除这些元素?
我在Java中使用Selenium WebDriver
。
感谢
Xpath针对页面源作用域执行。只有当您能够在页面源文本(driver.getPageSource()
的结果值(中的元素的样式属性中找到显示属性时,它才会起作用
不幸的是,在许多情况下,css样式并没有被页面源代码所反映,因此您应该执行其他驱动程序命令,如element.getCssValue('displayed')
。(但为了检查可见性,我建议使用isDisplayed()
(。
这意味着,您应该通过元素列表进行迭代,并通过某些条件获得子列表,这会增加驱动程序请求量,但这是解决此问题的唯一方法。