我有一个GWT应用程序,我正在尝试使用Selenium为它编写一些测试。
我使用XPath来标识页面上用于测试的元素。使用id
将不起作用,因为gwt值是由GWT自动生成的,并且可以更改。当我意识到我可以通过标签找到按钮时,事情开始很顺利,如下所示:
//button[.='OK']
然而,当我开始运行多个测试时,我开始遇到问题。我意识到问题在于,GWT的所有不同的“页面”,一旦由Javascript生成,就会保留在HTML中隐藏的<div>
元素中。这意味着我的Selenium测试有时会单击隐藏的按钮,而不是当前视图中可见的按钮。
使用Firebug检查HTML似乎通过将display: none
添加到<div>
元素的style
属性来隐藏这些元素。这意味着我可以找到所有隐藏的OK按钮,如下所示:
//div[contains(@style,'display: none')]//button[.='OK']
这将找到所有隐藏的OK按钮,即具有祖先<div>
的按钮,该祖先通过在style
中具有display: none
而隐藏。
我的问题是:如何使用XPath仅查找可见的OK按钮?如何在style
中查找没有带有display: none
的祖先<div>
元素的按钮
发布于 2009-03-16 19:24:42
这应该是可行的:
.//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。
发布于 2012-06-01 17:49:29
Selenium 2Webdriver为我们提供了处理此问题的isDisplayed()方法的选项。selenium贡献者做得很好。
发布于 2020-08-26 05:27:43
这对我来说很有效:
//div[[not(@hidden)]
https://stackoverflow.com/questions/651783
复制相似问题