选择元素的子元素(如果存在),否则选择父元素

时间:2019-05-21 13:49:46

标签: xpath ranorex

我想从<span>标记中捕获错误消息文本,如果不存在,则从其父项div捕获错误消息文本。为此,我需要一个有效的xpath表达式,如果可能的话,它可以将两种情况都作为一种情况处理。

这是html代码。 要么是版本1:

<div class='error-message'>
  some error message
</div>

或版本2:

<div class='error-message'>
  <span>
    some other error message
  </span>
</div>

因此,xpath是:

v1://div[@class='error-message']

v2://div[@class='error-message']/span

现在我需要以某种方式将v1和v2结合起来(也许用一些“或”表达式?)。

如果尝试过:

  • //div[@class='error-message']/descendant-or-self::*,但是当跨度存在时,它会找到两个元素(更喜欢跨度!)
  • //div[@class='error-message']/descendant-or-self::span,但是当跨度不存在时什么也找不到

我还尝试了以下答案:XPath select child if child exists, else select parent,但使用代码.../(span, .[not(span)])似乎无效,至少在Ranorex中如此。

2 个答案:

答案 0 :(得分:0)

您可以尝试以下方法:

//div[@class='error-message']/descendant-or-self::*[@innertext!='']

注意:有一个限制,如果文本内容为空,将无法使用:(

答案 1 :(得分:0)

由于您不知道该错误消息是否会出现在div标签或span标签中,因此您可以尝试以下方法

  

.//未知[@ innertext〜'错误消息']

此外,如果在原始帖子中的div标签之前,正确识别了该对象,它将起作用。