selenium 使用链接文本查找链接的XPath表达式

ntjbwcob  于 2022-11-24  发布在  其他
关注(0)|答案(4)|浏览(152)

在Selenium WebDriver中,如何使用 link text(“Add New Button”)为下面的HTML使用XPath表达式?

<a href="SOME URL">
  <span >
    <i class=""/>
  </span>Add New Button
</a>

我试着检查以下元件,但都不起作用。

  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通过链接文本找到链接呢?
qacovj5a

qacovj5a1#

一些已经给出的答案起作用,但另一些没有。我认为OP将受益于更多的解释。
您的原始表达式:

//a[text()='Add New Button']

不起作用,因为包含“添加新按钮”的文本节点在结尾处也有一个换行符。
下一条:

//a[contains(text(),'Add New Button']

不起作用(忽略缺少的括号),因为text()返回节点的 * 序列 *,而类似contains()的函数只计算序列中的 * 第一个 * 节点。在这种情况下,a中的第一个文本节点只包含空格,而 * 不是 * 包含“Add New Button”的节点。
您可以通过以下方式验证此声明:

//a[contains(text()[2],'Add New Button')]

该表达式将测试asecond 文本节点是否包含“Add New Button”,并且该表达式将返回a元素。但在这种情况下,最佳解决方案是:

//a[contains(.,'Add New Button')]

.将计算为元素的所谓“字符串值”,即元素的所有文本节点的串联,其中将包括“添加新按钮”。
normalize-space()的解决方案也是可能的,但它具有嵌套 predicate :

//a[text()[normalize-space(.) = "Add New Button"]]
uklbhaso

uklbhaso2#

使用XPath表达式,可以使用以下语句检查元素是否包含特定文本:

//a[contains(., 'Button')]
5jdjgkvh

5jdjgkvh3#

链接文本在主文本右侧包含不必要的空格,因此您需要执行以下操作来删除这些空格:

'//a[normalize-space(.)="Add New Button"]'
bjg7j2ky

bjg7j2ky4#

使用以下XPath表达式:

//*[contains(text(),'Add New Button')]

//a/i[contains(text(),'Add New Button')]

//a[@href='SOME URL']/i

或使用cssSelector-

a[href='SOME URL']>i

相关问题