【发布时间】:2017-08-19 05:42:04
【问题描述】:
我正在尝试根据其直系兄弟的子/孙节点上可用的文本来查找节点。 HTML 看起来像这样:
<div>
<div class="searchedDivClass" id="DynamicId1">
</div>
<div class="classType1">
//<h1> some text </h1>
</div>
//
<div class="searchedDivClass">
</div>
<div class="classType2">
//<p> some other text </p>
</div>
</div>
如您所见,搜索到的文本可以是任何类型的标签,但它始终是文本的一部分。
我认为以下 XPath 可以工作:
drive.FindElementsByXPath("//div[following-sibling::div[1][//*[contains(text(),'some text')]] and contains(@class,'searchedDivClass')]")
分解成碎片:
//div[contains(@class,'searchedDivClass')]
确保它返回我正在寻找的正确级别的 div,而不是在树中更高或更低。
//div[following-sibling::div[1][//*[contains(text(),'some text')]]
查找上面找到的 div 的第一个兄弟。在这个同级中,它会查找包含我们要查找的文本的元素。
但是,当我查看它返回的元素数量时,它实际上大于具有“searchedDivClass”的元素数量。
请注意,删除 //*[包含(text(),'一些文本')]
至少返回搜索到的类的元素个数。
最后,它自己的最后一个 XPath 正确地返回了包含文本的元素。
有什么想法或建议吗?
【问题讨论】:
-
您实际上要选择哪个元素?
-
我编辑了我的答案以使其更加清晰。我正在尝试根据其直接兄弟的子节点中的文本获取具有“DynamicId1”的 div。
-
您能否准确地告诉我们您要查找的元素/文本以及相对于哪个元素/文本?
-
我正在寻找 id 为“DynamicId1”的 div,基于“h1”下的文本。主要挑战是标签并不总是 h1,而且我们不知道在“nextSibling”中我们必须走多远。不过,Tarun 的回答非常完美。