我有这个HTML代码
<div>
<span>test</span>
foo
<br />
bar
</div>
我正试图直接在div中找到它(所以foo吧)。
通常情况下,我会去// div [normalize-space(text())='foobar'],但由于它不起作用。我试图添加空格或特殊字符,或修剪它们,但似乎没有任何效果。
从测试中我看到了
//div/text() = foo bar
//div/text()[1] = foo
//div/text()[2] = bar
//div[text()[1] = foo] = the div
//div[text()[2] = bar] = nothing
看起来text()在返回值时只返回索引[2],而不是在搜索值时返回。
我用java / selenium和firepath(一个firebug的插件来测试xpath)测试了这段代码。
任何人都知道如何从文本中获取div,如果可能的话,不使用contains,因为它们不准确。
谢谢。
答案 0 :(得分:2)
您可以尝试使用以下XPath
表达式to match required div
by its text:
//div[normalize-space()="test foo bar"]
请注意,删除空格的功能实际上是normalize-space()
,而不是sanitize-space()
<强>更新强>
如果您只想使用"foo"
和"bar"
文字节点,请尝试
//div[concat(normalize-space(text()[2]), normalize-space(text()[3]))="foobar"]')
或是否单独使用
//div[normalize-space(text()[2])='foo' and normalize-space(text()[3])='bar']
答案 1 :(得分:1)
您还可以尝试以下操作:
//span[text()='test']/ancestor::div
更新1:
//div[contains(.,'foo')]
更新2:
//span/ancestor::div[contains(.,'foo')]