38

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

假设我有如下的html..

<html><body>
  <table>
    <tr>
      <td><button>abcd</button></td>
      <td><button>abc</button></td>
    </tr>
  </table>
</body></html>

现在我想点击按钮“abc”

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

我还尝试了//button[matches(text(),'abc')], //button[matches($string,'abc')],等等,但这些都不能识别“abc”按钮//button[Text='abc')]//button[.='abc')]

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

虽然我的确切情况不是显示的示例,但需要应用类似的逻辑。

因此,任何帮助或建议将不胜感激。

4

6 回答 6

50

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

于 2013-11-01T08:01:50.357 回答
10

要查找元素“abcd”,您可以简单地使用:

//button[contains(text(),'abcd')]

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

//button[normalize-space(text())='abc']
于 2018-07-14T08:14:36.857 回答
7
//button[.="abc"]

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

于 2018-04-12T07:02:10.143 回答
4

精确搜索:

button[text()='abc']

对于模式匹配搜索:

button[starts-with(.,'abc')]
于 2019-08-19T06:47:09.637 回答
0

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

于 2013-11-01T05:20:23.633 回答
0

使用类似下面的东西对我来说非常好。

//button[(contains(.,'abc')) and not(contains(.,'abcd'))]
于 2020-10-21T13:38:54.790 回答