我需要一个关于在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”。在这方面,我需要一个 predicate 或一些其他过程,可以搜索确切的文本,而不是包含文本。
我也尝试了//button[matches(text(),'abc')]
,//button[matches($string,'abc')]
,//button[Text='abc')]
,//button[.='abc')]
和更多,但这些都没有工作,以确定“abc”按钮。
我不知道我的xpath版本是否有问题,因为我不知道版本,但我使用的是java 1.6 JDK。
虽然我的确切场景不是所示的示例,但需要应用类似的逻辑。
因此,任何帮助或建议将不胜感激。
7条答案
按热度按时间up9lanfz1#
我将使用下一个xpath
//button[text()='abc']
。您提到了text()
函数,但我不确定语法是否正确。您还尝试使用contains()
--它搜索部分文本,WebDriver获取找到的第一个元素。您的情况是<button>abcd</button>
按钮hyrbngr72#
要查找元素'abcd',只需用途:
要查找'abc',请使用normalize-space()函数,该函数将清理文本以便进行比较。
wecizke33#
精确搜索:
对于模式匹配搜索:
uyhoqukh4#
相等运算符前面的点将进行文本比较。另一个例子是
/PROJECT[.="MyProject"]
来自xPath Java tutorial。cgyqldqp5#
尝试使用ends-with代替contains。如果按钮没有唯一属性,您也可以添加父层次结构。例如//table/tr/td[1]。
gcmastyq6#
使用下面这样的东西对我来说非常好。
jdg4fx2g7#
精确搜索:.//按钮[./文本()='abc ']
注意:使你没有空间可进