在这个SO问题的帮助下,我有一个几乎工作的xpath:
//div[contains(@class, 'measure-tab') and contains(., 'someText')]
Run Code Online (Sandbox Code Playgroud)
然而,这有两个divs
:一个是孩子td
有一些文本,另一个是孩子span
.
如何将其缩小到与span
?
<div class="measure-tab">
<!-- table html omitted -->
<td> someText</td>
</div>
<div class="measure-tab"> <-- I want to select this div (and use contains @class)
<div>
<span> someText</span> <-- that contains a deeply nested span with this text
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
nwe*_*hof 43
为了找到一个div
包含某一类span
在任何深度含有一定的文字,请尝试:
//div[contains(@class, 'measure-tab') and contains(.//span, 'someText')]
Run Code Online (Sandbox Code Playgroud)
也就是说,这个解决方案看起来非常脆弱.如果表格恰好包含span
您正在查找的文本,则div
包含该表格的表格也将匹配.我建议找到一种更强大的过滤元素的方法.例如,通过使用ID或顶级文档结构.
小智 8
你可以用ancestor
.我发现这更容易阅读,因为您实际选择的元素位于路径的末尾.
//span[contains(text(),'someText')]/ancestor::div[contains(@class, 'measure-tab')]
Run Code Online (Sandbox Code Playgroud)
您可以使用xpath:
//div[@class="measure-tab" and .//span[contains(., "someText")]]
输入:
<root>
<div class="measure-tab">
<td> someText</td>
</div>
<div class="measure-tab">
<div>
<div2>
<span>someText2</span>
</div2>
</div>
</div>
</root>
Run Code Online (Sandbox Code Playgroud)
输出:
Element='<div class="measure-tab">
<div>
<div2>
<span>someText2</span>
</div2>
</div>
</div>'
Run Code Online (Sandbox Code Playgroud)