有人可以解释一下为什么我找不到包含文本的 h2 吗? 我正在寻找的 html 片段
<h2 class="heading">
<!---->
"Some text"
<!---->
</h2>
已经尝试使用
//*[contains(text(),'Some text')]
但它没有找到它。
编辑: 看起来问题是由于影子根元素造成的。 使用你的方法仍然没有帮助我找到该元素。但现在至少我知道我可以在不同的地方使用你的方法
最佳答案
您的问题说明了一个一般规则:您很少需要使用 text()
表达式。几乎所有时候,使用 string()
来获取元素的字符串值会更好;大多数时候你甚至不需要调用string()
,因为当需要字符串时,你可以提供一个节点,它的字符串值将自动被提取。
所以你可以写
//*[contains(string(),'Some text')]
或者更简单
//*[contains(.,'Some text')]
元素的字符串值(使用string()
函数获得)是其所有后代文本节点的串联。
这确实有一个缺点,如果 h2
元素包含“Some text”,那么 h2
元素的所有祖先也包含“Some text”。因此,您可能希望对搜索的元素更有选择性。
关于java - Xpath contains text() 不适用于注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65899493/