Выберите дочерний элемент, если существует, иначе взять родительский - PullRequest
0 голосов
/ 21 мая 2019

Я хочу получить текст сообщения об ошибке из тега <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>

Так что xpaths будут:

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 выберите дочерний элемент, если дочерний существует, иначе выберите родительский , но использование кода .../(span, .[not(span)]) кажется недопустимым, по крайней мере в Ranorex.

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

Поскольку вы не знаете, будет ли сообщение об ошибке присутствовать в теге div или span, вы можете попробовать следующий подход

. // unknown [@ innertext ~ 'сообщение об ошибке ']

Кроме того, оно будет работать, если объект был идентифицирован правильно до тех пор, пока тег div в исходном сообщении не будет.

0 голосов
/ 27 мая 2019

Вы можете попробовать следующий подход:

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

Примечание: есть ограничение, что если текстовое содержимое пустое, оно не будет работать: (

...