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

Java 如何在webdriver中使用Xpath通过精确文本匹配搜索节点,java,xpath,webdriver,Java,Xpath,Webdriver,我需要一些关于在webDriver中使用xpath搜索精确文本的帮助 假设我的html如下所示 <html><body> <table> <tr> <td><button>abcd</button></td> <td><button>abc</button></td> </tr> </ta

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

假设我的html如下所示

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

abcd
abc
现在我想点击按钮“abc”

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

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

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

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


因此,如果您有任何帮助或建议,我们将不胜感激。

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

我将使用下一个xpath
//按钮[text()='abc']
。您提到了
text()
函数,但我不确定语法是否正确。您还尝试使用
contains()
——它搜索部分文本,WebDriver获得找到的第一个元素。我知道你的情况是
abcd
按钮

//button[.="abc"]

相等运算符前面的点将执行文本比较。另一个示例是。

中的
/PROJECT[.=“MyProject”]
要查找元素“abcd”,您只需使用:

//button[contains(text(),'abcd')]
要查找“abc”,请使用normalize-space()函数,该函数将清理文本以进行比较

//button[normalize-space(text())='abc']
如需精确搜索:

button[text()='abc']
对于模式匹配搜索:

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

使用下面这样的东西对我来说非常好

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

thanx对于你的评论,告诉我一件事,html包含文本的前导和尾随空间。类似于“abcd”和“abc”。如果我使用[contains(text(),'abc')]xpath,那么它将在“abcd”按钮上执行。但是如果我使用的是[以(text(),'abc')开头或[以(text(),'abc')结尾],则其显示无法找到定位器。我在xpath中提到的字符串前导或尾随的空格是正确的??其次是“td”在我的例子中,数字不是固定的。按钮可能包含在表中的任何td中。由于按钮的生成是动态的,因此,我无法按层次结构进行操作。如果不访问应用程序,则无法进行判断,但您可以通过获取文本属性值和使用语言功能进行字符串比较来实现ns.Element.getattribute(“text”)比x更适合这个建议。如果我有一个谓词来匹配一个精确的文本,那就更好了。尽管有点忙,但我还是通过Element.getText()方法使用字符串检查创建了库,现在它工作得很好…@souvik the
normalize-space()
函数将清理文本以进行比较。请尝试
//按钮[normalize space(text())='abc']
我不明白…使用equals搜索有什么问题?…
//按钮[text()='abc']
。@Arrana看起来错误的是
//按钮[text='abc']
,但正确的是
//按钮[text()='abc']
(正如您所写)是的,它绝对正确……这就像是一个平等的搜索……//按钮[text()='abc']此xpath工作正常……非常感谢。工作起来很有魅力。谢谢。normalize-space示例在Selenium IDE for chrome上为我工作