【问题标题】:Check if node or Innernode equals text in Selenium检查节点或内节点是否等于 Selenium 中的文本
【发布时间】:2014-10-01 22:13:37
【问题描述】:
<button id="s:button" class="gui-button" type="submit" onclick="" name="s:button" role="button">
    <span class="btext gui-a">OK</span>
</button>

我想检查字符串“OK”是否在子节点(例如跨度)或按钮中。我尝试提交以下 XPath:

//button[@type='submit']//child::text() = 'OK' 或 //text() ='OK'

它工作正常 - 但在 Selenium 中我得到一个 com.thoughtworks.selenium.SeleniumException: ERROR: Command execution failure.- 命令请求:isElementPresent[xpath=//button[@type='submit']/ /child::text() = 'OK' 或 //text() ='OK', ] 在会话 7XXXX 上。是否需要不同的 XPath 语法。

【问题讨论】:

  • 这是一种糟糕的测试设计。应用程序应该是一致的。如果它是要包含文本的跨度,那么您可以使用:(CSS)button[type='submit'] &gt; span.btext 无需添加额外的检查。

标签: selenium xpath


【解决方案1】:

检查按钮的文本节点,或按钮子节点的文本节点是否等于"OK"

//button[@type='submit'][child::*/text()='OK' or text()='OK']

注意child::text() 指的是按钮的直接子 文本节点,您的HTML 示例没有这种类型。要引用作为按钮子节点直接子的文本节点,请使用child::*/text() 或简单地使用*/text()

实际上你不必显式调用text(),上面的XPath可以进一步简化如下:

//button[@type='submit'][*='OK' or .='OK']

【讨论】:

  • 谢谢...但是 X-Path 结果是 Element=''....我宁愿需要真假来匹配或不匹配...
  • 恐怕您无法仅使用 XPath 实现这一目标。您可以执行此 XPath,然后使用宿主编程语言检查 XPath 是否返回任何内容,如果返回则表示 true 否则表示 false
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-13
  • 1970-01-01
  • 2016-03-21
  • 1970-01-01
  • 2010-11-30
  • 2017-09-10
  • 2017-04-30
相关资源
最近更新 更多