当前位置: 首页 > 面试题库 >

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

水睿
2023-03-14
问题内容

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

我正在使用XPath来标识测试页面上的元素。使用id将无效,因为这些id值是由GWT自动生成的,并且可以更改。当我意识到我可以按其标签找到按钮时,事情进展顺利,如下所示:

//button[.='OK']

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

用Firebug检查HTML ,看来GWT <div>通过添加元素display: nonestyle属性来隐藏元素。这意味着我可以找到所有隐藏的“确定”按钮,如下所示:

//div[contains(@style,'display: none')]//button[.='OK']

这将找到所有隐藏的“确定”按钮,即具有祖先的按钮,该祖先<div>通过在display: none中被隐藏style

我的问题是:如何使用XPath仅查找可见的OK按钮?如何找到它们没有什么祖先的按钮<div>与元素display: nonestyle


问题答案:

这应该工作:

.//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可见。



 类似资料:
  • 我有一个SPA,其中有多个具有相同类的div。我希望量角器选择可见的div并单击它。我一直得到,这让人相信它得到了一些不在这个特定页面上的元素(也许?)。我还得到,这再次让我认为它不是单击可见的,而是不可见的。 这是我的规格: 如何选择可见的 并单击它?

  • 问题内容: 我想创建一个Selenium测试,以使用AOL邮件测试我们的扩展。我设法登录到AOL并撰写了电子邮件,但是我还需要在iframe中的编辑器中选择元素。我检查了一下,即使打开了编辑器,以下测试也失败了: 我得到了错误。如何通过Xpath(或通过Selenium以任何其他方式)选择iframe的主体和其他元素? 问题答案: 在切换到之前,您无法浏览。您的xPath 将不会起作用,因为代码位

  • //div/SPAN[包含(text(),“默认值”)]/祖先::div/SPAN[包含(text(),“选择日期”)]/follows-sibling::div//输入 Xpath 2返回3个元素,即图像中的下拉项。 //div[@class='_selectcontainer_psmgei']/div//输入 截图:视窗截图 HTML屏幕截图:HTML代码

  • 假设我有这个(简化): 然后,我可以通过XPath选择submit按钮。//form[@id='myform']/input[@type='submit']。太棒了 但是,我的模板可能会发生变化,我希望在提交按钮的深度上保持灵活。它可能会放在一个表格中,如下所示: 我知道我可以选择孙子的元素,但我不能选择任何深度的孙子。例如。: 仅选择孙子女,没有进一步的深度 那么,如何在不使用元素ID的情况下可

  • 如何只选择父级而不选择子级? List summaryLinks=summary.findelements(by.xpath(“”));

  • 如果我有 如果我想选择包含td的a,我该怎么做? 我测试过: 但是我要获得td节点,我要获得a节点。如何使用XPath实现这一点?