用br从文本中查找xpath

时间:2017-05-10 15:29:02

标签: xpath selenium-webdriver

我有这个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,因为它们不准确。

谢谢。

2 个答案:

答案 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')]