我需要一些关于在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。
虽然我的确切情况不是显示的示例,但需要应用类似的逻辑。
因此,任何帮助或建议都将受到高度赞赏。
答案 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']