Dav*_*ebb 46 gwt selenium xpath
我有一个GWT应用程序,我正在尝试使用Selenium编写一些测试.
我正在使用XPath来识别测试页面上的元素.使用id将不起作用,因为idGWT自动生成值并且可以更改.当我意识到我可以通过他们的标签找到按钮时,情况开始顺利,如下所示:
//button[.='OK']
Run Code Online (Sandbox Code Playgroud)
但是,当我开始运行多个测试时,我开始遇到问题.我意识到问题是一旦由Javascript生成的GWT应用程序的所有不同"页面"保留在隐藏<div>元素的HTML中.这意味着我的Selenium测试有时会单击隐藏按钮而不是当前视图中可见的按钮.
使用Firebug检查HTML ,似乎GWT <div>通过添加属性display: none来隐藏元素style.这意味着我可以找到所有隐藏的OK按钮,如下所示:
//div[contains(@style,'display: none')]//button[.='OK']
Run Code Online (Sandbox Code Playgroud)
这会发现所有的隐藏的按钮OK,即它有一个祖先的按钮<div>被具有隐藏display: none的style.
我的问题是:如何使用XPath只查找可见的OK按钮?如何找到它们没有什么祖先的按钮<div>与元素display: none的style?
Jul*_*urg 56
这应该工作:
.//button[.='OK' and not(ancestor::div[contains(@style,'display:none')])
and not(ancestor::div[contains(@style,'display: none')])]
Run Code Online (Sandbox Code Playgroud)
编辑:
下面更简单,更有效的表达方式:
//div[not(contains(@style,'display:none'))]//button[.='OK']
Run Code Online (Sandbox Code Playgroud)
因为每个按钮至少有一个在其祖先中可见的div,所以无法正常工作.
Har*_*ddy 12
Selenium 2 Webdriver为我们提供了isDisplayed()方法的选项,可以解决这个问题.硒贡献者的出色工作.
| 归档时间: |
|
| 查看次数: |
78616 次 |
| 最近记录: |