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



我想从<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,但在跨度不存在时什么也找不到

我也尝试了,这个答案中给出了什么:如果孩子存在,则选择孩子,否则选择父级,但使用代码.../(span, .[not(span)])似乎无效,至少在 Ranorex 中是这样。

您可以尝试以下方法:

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

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

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

.//unknown[@innertext~'错误消息']

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

最新更新