使用链接文本查找链接的xpath?

时间:2017-01-11 08:31:57

标签: html selenium xpath selenium-webdriver

在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?

使用链接文本查找链接

4 个答案:

答案 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