在 Selenium WebDriver 中,如何使用 _链接文本_(“添加新按钮”)为以下 HTML 使用 XPath 表达式?
<a href="SOME URL">
<span >
<i class=""/>
</span>Add New Button
</a>
我尝试如下检查元素,但都没有用。
//a[text()='Add New Button']
//a[contains(text(),'Add New Button']
//a/span/i[text()='Add New Button']
//a/span/i[contains(text(),'Add New Button']
我知道 3 和 4 不会,但我只是试过了。
那么对于这样一个 HTML DOM,我如何使用 XPath 找到使用链接文本的链接呢?
原文由 user2416212 发布,翻译遵循 CC BY-SA 4.0 许可协议
一些已经给出的答案有效,但其他答案则没有。而且我认为 OP 会从更多解释中受益。
你原来的表达:
不起作用,因为包含“添加新按钮”的文本节点末尾也有一个换行符。
下一个:
不起作用(撇开缺少的括号),因为
text()
返回一个节点 _序列_,而类似contains()
的函数将仅评估序列中的 第一个 节点。在这种情况下,内部的第一个文本节点a
仅包含空格,而 不是 包含“添加新按钮”的节点。您可以通过以下方式验证此声明:
这将测试
a
的 第二个 文本节点是否包含“添加新按钮”——并且该表达式将返回a
元素。但在这种情况下最好的解决方案是:.
将评估元素的所谓“字符串值”,即所有文本节点的串联,其中将包括“添加新按钮”。normalize-space()
的解决方案也是可能的,但它有嵌套谓词: