在Selenium WebDriver中,如何使用链接文本将xpath用于以下HTML("添加新按钮")
<a href="SOME URL">
<span >
<i class=""/>
</span>Add New Button
</a>
我尝试检查元素如下,但所有dint工作
1) //a[text()='Add New Button']
2) //a[contains(text(),'Add New Button']
3) //a/span/i[text()='Add New Button']
4) //a/span/i[contains(text(),'Add New Button']
我知道3和4不会赢,但只是尝试过。
对于这样的HTML DOM,如何使用xpath?
使用链接文本查找链接答案 0 :(得分:4)
已经给出的一些答案有效,有些则没有。而且我认为OP会从更多的解释中获益。
你的原始表达:
//a[text()='Add New Button']
不起作用,因为包含&#34;添加新按钮&#34;的文本节点最后还有一个换行符。
下一个:
//a[contains(text(),'Add New Button']
不起作用(不考虑缺少的括号),因为text()
返回节点的序列,像contains()
这样的函数只会首先评估 序列中的节点。在这种情况下,a
中的第一个文本节点只包含空格,并且不包含&#34;添加新按钮&#34;。
您可以使用以下方式验证此声明:
//a[contains(text()[2],'Add New Button')]
将测试a
的第二个文本节点是否包含&#34;添加新按钮&#34; - 此表达式将返回a
元素。但在这种情况下,最好的解决方案是:
//a[contains(.,'Add New Button')]
.
将评估为所谓的&#34;字符串值&#34;一个元素,它的所有文本节点的串联,包括&#34;添加新按钮&#34;。
也可以使用normalize-space()
的解决方案,但嵌套谓词:
//a[text()[normalize-space(.) = "Add New Button"]]
答案 1 :(得分:1)
使用xpath可以检查元素是否包含带有以下语句的文本
//a[contains(., 'Button')]
答案 2 :(得分:1)
链接文本包含主文本右侧不必要的空格,因此您需要按照以下内容删除它们:
module: {}
答案 3 :(得分:0)
使用以下xpath
//*[contains(text(),'Add New Button')]
或
//a/i[contains(text(),'Add New Button')]
或
//a[@href='SOME URL']/i
或使用cssSelector
-
a[href='SOME URL']>i