如何找到由br标签分隔的2个单词的文本xpath

时间:2018-04-09 02:00:09

标签: selenium xpath

以上是面试官问我的问题。他要求写下xpath。

我回答您可以将contains()AND运算符一起使用。我也回答你可以使用following::,但他说这不是正确答案。

有没有人知道如何在其中使用换行标记的整个语句的xpath?

2 个答案:

答案 0 :(得分:1)

您可以通过测试父元素的字符串值来忽略介入的br元素。

例如,对于包含此类div元素的XML,

<div>
  <input id='2'/>
  Hello
  <br/>
  World
</div>

这个XPath,

//div[normalize-space() = "Hello World"]

将选择空格规范化字符串值为div的所有此类"Hello World"元素。

OTOH,您可以通过此XPath专门选择包含Hello<br/>World的元素:

//br[preceding-sibling::node()[1][self::text()[normalize-space()="Hello"]]]
    [following-sibling::node()[1][self::text()[normalize-space()="World"]]]/..

这只是Mads Hansen's idea(+1)的重写,所以请提出他的回答。

答案 1 :(得分:1)

如果<br/>将两个单词分开的事实很重要,那么以下XPath将起作用。它会查找foo<br/>bar

它选择包含值为text()的子foo节点的任何元素,该节点后面紧跟着<br/>兄弟,后面紧跟着一个兄弟text()值为bar的节点。

不知道你想要多么严格。在评估normalize-space()值时,您可以使用text()来容纳前导和尾随空白字符:

//*[text()[normalize-space(.)='foo']       
  /following-sibling::node()[1][self::br]         
    /following-sibling::node()[1][self::text()[ normalize-space(.)='bar']]]