<a href="javascript:void(0)" title="home">
<span class="menu_icon">Maybe more text here</span>
Home
</a>
因此,对于上面的代码,当我将//a
写为XPath时,它会突出显示,但是当我写//a[contains(text(), 'Home')]
时,它不会突出显示。我认为这很简单,应该有效。
我的错误在哪里?
答案 0 :(得分:4)
其他答案错过了实际问题:
var input = document.body.appendChild(document.createElement("input"));
input.onchange = input.onkeydown = input.onkeyup = function() {
input.value = input.value.replace(/\D/igm, '');
};
上匹配,但这不是OP的原因
XPath在以前可能已经运行的地方失败了。@title
与...不同
Home
,但有一个home
文本节点作为Home
的子节点,因此OP是
如果他不信任a
在场,则有权使用Home
。OP的XPath,
@title
表示选择第一个文本节点包含子串//a[contains(text(), 'Home')]
的所有a
个元素。然而,第一个文本节点只包含空格。
说明: Home
选择上下文节点text()
的所有子文本节点。当a
被赋予多个节点作为其第一个参数时,它将获取 第一个 节点的字符串值,但contains()
出现在第二个文本中节点,而不是第一个。
相反,OP应该使用此XPath,
Home
表示使用 任何 文本子项选择所有//a[text()[contains(., 'Home')]]
元素,其字符串值包含子字符串a
。
如果没有周围的空格,可以使用此XPath来测试相等而不是子字符串包含:
Home
或者,对于周围的空格,可以使用此XPath将其修剪掉:
//a[text()[.='Home']]
答案 1 :(得分:1)
你可以试试这个XPath ..它只是按属性选择元素
//a[@title,'home']
答案 2 :(得分:1)
是的,你正在犯2个错误,当你想要Home
与小写字母h匹配时,你正在用大写字母H写home
。当你想检查“标题”属性时,你也试图检查文本内容。纠正那些2,你得到:
//a[contains(@title, 'home')]
但是,如果您想匹配确切的字符串home
,而不是标题属性中任何位置home
的匹配项,请使用@ zsbappa的代码。