首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用XPath仅选择可见元素?

如何使用XPath仅选择可见元素?
EN

Stack Overflow用户
提问于 2009-03-16 19:19:49
回答 7查看 103.3K关注 0票数 57

我有一个GWT应用程序,我正在尝试使用Selenium为它编写一些测试。

我使用XPath来标识页面上用于测试的元素。使用id将不起作用,因为gwt值是由GWT自动生成的,并且可以更改。当我意识到我可以通过标签找到按钮时,事情开始很顺利,如下所示:

代码语言:javascript
运行
复制
//button[.='OK']

然而,当我开始运行多个测试时,我开始遇到问题。我意识到问题在于,GWT的所有不同的“页面”,一旦由Javascript生成,就会保留在HTML中隐藏的<div>元素中。这意味着我的Selenium测试有时会单击隐藏的按钮,而不是当前视图中可见的按钮。

使用Firebug检查HTML似乎通过将display: none添加到<div>元素的style属性来隐藏这些元素。这意味着我可以找到所有隐藏的OK按钮,如下所示:

代码语言:javascript
运行
复制
//div[contains(@style,'display: none')]//button[.='OK']

这将找到所有隐藏的OK按钮,即具有祖先<div>的按钮,该祖先通过在style中具有display: none而隐藏。

我的问题是:如何使用XPath仅查找可见的OK按钮?如何在style中查找没有带有display: none的祖先<div>元素的按钮

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-03-16 19:24:42

这应该是可行的:

代码语言:javascript
运行
复制
.//button[.='OK' and not(ancestor::div[contains(@style,'display:none')])
and not(ancestor::div[contains(@style,'display: none')])]

编辑:

下面是更简单、更有效的表达式:

代码语言:javascript
运行
复制
//div[not(contains(@style,'display:none'))]//button[.='OK']

无法正常工作,因为每个按钮至少有一个在其祖先中可见的div。

票数 70
EN

Stack Overflow用户

发布于 2012-06-01 17:49:29

Selenium 2Webdriver为我们提供了处理此问题的isDisplayed()方法的选项。selenium贡献者做得很好。

票数 14
EN

Stack Overflow用户

发布于 2020-08-26 05:27:43

这对我来说很有效:

代码语言:javascript
运行
复制
//div[[not(@hidden)]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/651783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档