如何使用XPath选择可见元素?
我有一个GWT应用程序,正在尝试使用Selenium编写一些测试。
我正在使用XPath来标识测试页面上的元素。使用id
将无效,因为这些id
值是由GWT自动生成的,并且可以更改。当我意识到我可以按其标签找到按钮时,事情进展顺利,如下所示:
//button[.='OK']
但是,当我开始运行多个测试时,我开始遇到问题。我意识到问题是,一旦Javascript生成的GWT应用程序的所有不同“页面”都保留在HTML中的隐藏<div>
元素中。这意味着我的Selenium测试有时会单击隐藏的按钮,而不是在当前视图中可见的按钮。
用Firebug检查HTML ,看来GWT <div>
通过添加元素display:
none的style
属性来隐藏元素。这意味着我可以找到所有隐藏的“确定”按钮,如下所示:
//div[contains(@style,'display: none')]//button[.='OK']
这将找到所有隐藏的“确定”按钮,即具有祖先的按钮,该祖先<div>
通过在display: none
中被隐藏style
。
我的问题是:如何使用XPath仅查找可见的OK按钮?如何找到它们没有什么祖先的按钮<div>
与元素display: none
的style
?
回答:
这应该工作:
.//button[.='OK' and not(ancestor::div[contains(@style,'display:none')])and not(ancestor::div[contains(@style,'display: none')])]
编辑:
下面是更简单,更有效的表达式:
//div[not(contains(@style,'display:none'))]//button[.='OK']
无法正常工作,因为每个按钮在其祖先中至少有一个div可见。
以上是 如何使用XPath选择可见元素? 的全部内容, 来源链接: utcz.com/qa/427926.html