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

时间:2013-11-01 05:04:17

标签: java xpath webdriver

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

假设我有如下的html ..

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

现在我想点击按钮&#34; abc&#34;

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

我还尝试过使用//button[matches(text(),'abc')]//button[matches($string,'abc')]//button[Text='abc')]//button[.='abc')]以及其他更多内容,但这些内容都没有用于识别&#34; abc&#34;按钮。

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

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

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

7 个答案:

答案 0 :(得分:26)

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

答案 1 :(得分:2)

//button[.="abc"]

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

要找到'abc',请使用normalize-space()函数,该函数会清理您的文本以进行比较。

//button[normalize-space(text())='abc']

答案 4 :(得分:0)

精确搜索:

button[text()='abc']

对于模式匹配搜索:

button[starts-with(.,'abc')]

答案 5 :(得分:0)

使用类似下面的内容对我来说很好。

//button[(contains(.,'abc')) and not(contains(.,'abcd'))]

答案 6 :(得分:-1)

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

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

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

//button[normalize-space(text())='abc']