Xpath с условием OR для идентификации элемента - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь найти элемент, использующий условие Xpath с ИЛИ в веб-сайте. Синтаксические ошибки не отображаются, но элемент не идентифицируется. Я не могу понять, в чем дело ...?

как только мы запустим веб-сайт, появится изображение или ссылка, цель состоит в том, чтобы кликнуть по доступной ссылке.

driver.findElement(By.xpath("//*[@id='nav-npm-footer']/div[1]/a/span or @id='multiasins-img-link']")).click();

код, который должен щелкнуть по изображению или доступной ссылке

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

Недопустимый путь xpath.Нужно придумать стратегию для обработки таких сценариев, а не использовать xpath только для решения таких ситуаций.В идеале вы должны справиться с этим двумя отдельными путями и стратегией.Попытайтесь выяснить, какой из них существует или присутствует и видим для взаимодействия, а затем взаимодействовать с ним.Хорошей практикой также является наличие отдельных путей xpath для разных элементов, и перед тем, как взаимодействия всегда проверяют, является ли элемент видимым и можно ли взаимодействовать.идентифицировать элемент.

0 голосов
/ 05 апреля 2019

Это не правильный xpath - это два отдельных выражения xpath, соединенные с помощью "или":)

Вам лучше расположить ссылку и изображение отдельно - у каждого свой собственный xpath, //*[@id='nav-npm-footer']/div[1]/a/span и //*[@id='multiasins-img-link']. Таким образом, вы также узнаете, какой из них действительно присутствовал, и щелкнули - это, вероятно, требование, которое вы также хотите проверить ...

И если вы все еще хотите сделать это с одним xpath, это ближе:

//*[@id='multiasins-img-link' or (ancestor::*[@id='nav-npm-footer']/div[1]/a and name()='span']

Это выберет либо элемент с таким идентификатором, либо элемент с именем span и имеющим в своем пути предка эту структуру - элемент с идентификатором nav-npm-footer, затем div, первый из которых имеет. Имейте в виду, что «span» может быть не прямым потомком «a», а внуком или другим потомком.

И если необходимо конкретизировать положение диапазона относительно этих 3 элементов - это должно сделать:

//*[@id='multiasins-img-link' or (name()='span' and ..[name()='a']/..[name()='div']/..[@id='nav-npm-footer'])]

Я бы действительно пошел с двумя путями, а не по этой кроличьей норе:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...