使用xpath //ul//li[contains(text(),"outer")]
在外部ul中查找li不起作用
<ul>
<li>
<span> not unique text, </span>
<span> not unique text, </span>
outer ul li 1
<ul >
<li> inner ul li 1 </li>
<li> inner ul li 2 </li>
</ul>
</li>
<li>
<span> not unique text, </span>
<span> not unique text, </span>
outer ul li 2
<ul >
<li> inner ul li 1 </li>
<li> inner ul li 2 </li>
</ul>
</li>
</ul>
知道如何在外部ul中找到具有特定文本的li吗?
谢谢
答案 0 :(得分:12)
这对你有用//ul//li[contains(.,"outer")]
答案 1 :(得分:2)
使用Saxon运行它,原始的XPath表达式给出:
XPTY0004:不允许包含多个项目的序列作为第一个参数 contains()(“”,“”,...)
现在,我猜Selenium可能使用XPath 1.0而不是XPath 2.0,而在1.0中,contains()函数具有“第一项语义” - 它将其参数转换为字符串,如果参数是节点集包含多个节点,涉及仅考虑第一个节点。第一个文本节点可能是空格。
如果要测试某个子文本节点是否包含“外部”,请使用
//ul//li[text()[contains(.,"outer")]]
切换到XPath 2.0的另一个原因......
答案 2 :(得分:1)
我希望您只想考虑li
的直接子节点的文本节点。因此,您使用text()
是正确的(如果您使用contains(.,"outer")
,则会考虑使用li的任何子项的文本。
因此请尝试:
//ul/li[text()[contains(.,'outer')]]
答案 3 :(得分:0)
对于上述问题 -
此解决方案将起作用
// // UL李[含有(&#34;外&#34)]
&#34;&#34;选择当前节点