Robot Framework Appium Library: получение ValueError: локатор элементов с префиксом '// * [@ class' не поддерживается с некоторыми ключевыми словами - PullRequest
1 голос
/ 24 февраля 2020

Это с Robot Framework, работающим с Appium версии 1.5.04 на физическом устройстве Android с контекстом устройства, установленным на NATIVE_APP

Шаги для воспроизведения: использование отношения xpath, где элемент, который мы хотим ( button) является дочерним элементом View, в котором есть несколько сущностей Views на одном уровне

Производный xpath: xpath = //[@class='android.widget.Button 'и. /parent::[(./preceding-sibling::* | ./following-sibling::*)[contains(@contentDescription,'Sticky')]]]

Этот xpath предназначен действовать на кнопку Button, являющуюся дочерним элементом элемента View, который содержит имя «Sticky»

Я обнаружил, что следующее ключевое слово Click Element работает нормально (находит и щелкает элемент)

Например:

Wait Until Keyword Succeeds     5x    3 sec    Click Element   xpath= //*[@class='android.widget.Button' and ./parent::*[(./preceding-sibling::* | ./following-sibling::*)[contains(@contentDescription,'Sticky')]]]

Однако, любое из условных ключевых слов, например: (Я не всегда хочу нажимать на элемент, просто посмотреть, есть он там или нет)

Element Should Be Visible   xpath= //*[@class='android.widget.Button' and ./parent::*[(./preceding-sibling::* | ./following-sibling::*)[contains(@contentDescription,'Sticky')]]]

(используется тот же xpath)

выдает ошибку: ValueError: Element locator with prefix '//*[@class' is not supported

У меня три изменил значения других элементов (например, ContentDescription) с тем же результатом. К сожалению, этот конкретный элемент не имеет назначенного идентификатора.

Есть ли другой синтаксис xpath, который я должен использовать, или другое ключевое слово, которое лучше подойдет?

1 Ответ

1 голос
/ 01 марта 2020

Я не уверен, почему между ними существует расхождение, но я предполагаю, что исправление заключается в использовании : вместо = для отделения префикса от локатора:

Element Should Be Visible   xpath://*[@class='android.widget.Button'...

И робот, и библиотека селена используют =, чтобы помочь идентифицировать ключевой аргумент (робот) или префикс локатора (селен). Этой проблемы можно избежать, используя : для префикса.

...