为什么我的XPath不根据其标签文本选择链接/按钮?

Sho*_*tar 4 html xml selenium xpath

<a href="javascript:void(0)" title="home">
    <span class="menu_icon">Maybe more text here</span>
    Home
</a>
Run Code Online (Sandbox Code Playgroud)

因此,对于上面的代码,当我编写//a为XPath时,它会突出显示,但是当我编写时//a[contains(text(), 'Home')],它不会被突出显示。我认为这很简单,应该有效。

我的错在哪里

kjh*_*hes 5

其他答案错过了这里的实际问题:

  1. 是的,您可以匹配@title,但这不是OP的XPath在以前可能无法正常工作的地方失败的原因。
  2. 是的,XML和XPath区分大小写,因此Home与并不相同 home,但是有一个Home文本节点作为的子节点a,因此,Home如果OP 不信任他的存在,那么OP就可以使用@title

真正的问题

OP的XPath,

//a[contains(text(), 'Home')]
Run Code Online (Sandbox Code Playgroud)

表示选择所有a第一个文本节点包含子字符串的元素Home。但是,第一个文本节点只包含空格。

说明: text()选择上下文节点的所有子文本节点a。当contains()给定多个节点作为其第一个参数时,它将采用第一个节点的字符串值,但Home出现在第二个文本节点中,而不是第一个。

相反,OP应该使用此XPath,

//a[text()[contains(., 'Home')]]
Run Code Online (Sandbox Code Playgroud)

这表示选择a带有字符串子级包含substring的任何文本子级的所有元素Home

如果周围没有空格,则可以使用此XPath来测试是否相等,而不是包含子字符串:

//a[text()[.='Home']]
Run Code Online (Sandbox Code Playgroud)

或者,对于周围的空格,可以使用此XPath对其进行修剪:

//a[text()[normalize-space()= 'Home']]
Run Code Online (Sandbox Code Playgroud)

也可以看看: