1 回答

TA贡献1829条经验 获得超4个赞
尝试使用以下 xpath。
//table//div[contains(.,'End:')]
截屏:
说明:编辑 1
首先让我们看看text()
target 下有多少个节点div
。
所以 div 有 3 个文本节点。
让我详细说明 OP 使用的原始 xpath。
//div[contains(text(), 'End')]
^div present anywhere in the document
^which contains
^the **first** text() node with string value as `End`
当contains()作为它的第一个参数(在div[argument]中)给出时,它采用第一个节点的字符串值,但出现在第二个文本节点中,而不是第一个。这就是 xpath 不起作用的原因。End
我们有 2 个选项来处理这个问题。
1) 使用 text() 作为第一个参数- 通过这种方式,它将获取当前上下文下的所有文本节点,然后contains()用作条件来检查text()将匹配其值包含的任何 text() 节点的值End,如下所示。
//div[text()[contains(., 'End')]]
^div present any where in the document
^which have text() node
^ that contains 'End`
检查以下屏幕截图:
到这个时候,你会问为什么//div[contains(text(), 'Start')]
OP 使用的第一个 xpath ( ) 有效?
如果您查看 div 中关联的 text() 节点,Start
文本存在于第一个 text() 节点本身中,这就是他能够使用该 xpath 的原因。
2)使用。检查当前节点上下文简单来说,当您说.
它将检查整个当前元素上下文的End
.
//div[contains(.,'End')]
如果您不将 scopt 限制为//table
(在 xpath 的开头),您将获得 5 个 div,因为原始 div 的祖先 div 具有此文本也与 xpath 匹配。所以限制在表格中检查的范围,比如`//table//div[contains(.,'End')]
添加回答
举报