如何使用webdriver中的Xpath通过精确文本匹配搜索节点

sou*_*vik 14 java xpath webdriver

关于在webDriver中使用xpath搜索确切文本,我需要一些帮助.

假设我有html如下..

<html><body>
  <table>
    <tr>
      <td><button>abcd</button></td>
      <td><button>abc</button></td>
    </tr>
  </table>
</body></html>
Run Code Online (Sandbox Code Playgroud)

现在我想点击"abc"按钮

我使用xpath,//button[contains(text(),'abc')]但它始终在按钮"abcd"上执行,因为它还包含文本"abc".在这方面,我需要一个谓词或一些其他程序,可以搜索确切的文本而不是包含文本.

我也尝试过//button[matches(text(),'abc')], //button[matches($string,'abc')]//button[Text='abc')],//button[.='abc')]以及更多,但这些都没有确定"abc"按钮.

我不知道我的xpath版本是否有任何问题,因为我不知道该版本.但我正在使用java 1.6 JDK.

虽然我的确切场景不是显示的示例,但需要应用类似的逻辑.

因此,任何帮助或建议将受到高度赞赏.

oly*_*lyv 28

我会使用下一个xpath //button[text()='abc'].你提到过text()函数,但我不确定语法是否正确.您也尝试使用contains()- 它搜索部分文本,WebDriver找到第一个元素.我的情况是<button>abcd</button>按钮


小智 14

对于精确搜索:

button[text()='abc']
Run Code Online (Sandbox Code Playgroud)

对于模式匹配搜索:

button[starts-with(.,'abc')]
Run Code Online (Sandbox Code Playgroud)


小智 8

要查找元素“abcd”,您只需使用:

//button[contains(text(),'abcd')]
Run Code Online (Sandbox Code Playgroud)

要查找“abc”,请使用 normalize-space() 函数,该函数将清理您的文本以进行比较。

//button[normalize-space(text())='abc']
Run Code Online (Sandbox Code Playgroud)

  • 规范化空间示例在适用于 chrome 的 Selenium IDE 上对我有用 (2认同)

nan*_*oft 5

//button[.="abc"]
Run Code Online (Sandbox Code Playgroud)

相等运算符之前的点将进行文本比较。另一个示例/PROJECT[.="MyProject"]来自xPath Java 教程


Akb*_*bar 0

尝试使用结尾而不是包含。如果按钮没有唯一的属性,您也可以添加父层次结构。就像//table/tr/td[1]。