Appium: найти элемент по частичному elementId / UID с XPath - PullRequest
2 голосов
/ 24 марта 2020

Я работаю над автоматизацией тестирования приложения iOS. Я использую Appium-desktop-client (1.15.1) в MacOS (10.15) и нахожу элемент в Iphone 11 (13.3) через инспектора со следующими атрибутами: снимок экрана из атрибутов

Цель состоит в том, чтобы выполнить в java следующие действия с appium (6.1.0) и селеном (3.13.0):

Найти этот элемент с помощью elementId и получите значение переменной (в данном случае 2,6 км).

Задача достигает элемента. В Инспекторе accessibility-id и name всегда равны значению, что означает, что я не могу локализовать элемент с ними. elementId не является фиксированным, оно меняется после 3-го блока чисел (это означает, что я могу использовать только 45000000-0000-0000.) Я также могу воспроизвести этот elementId из инспектора, используя код из "UID" Атрибут.

Чтобы локализовать элемент, я попытался сделать следующее:

appiumDriver.findElementByXPath("//*[contains(@id,'45000000-0000-0000')]");

appiumDriver.findElementByXPath("//*[contains(@name,'45000000-0000-0000')]");

appiumDriver.findElementByXPath("//*[contains(@uid,'45000000-0000-0000')]");

appiumDriver.findElementByXPath("//*[contains(@elementId,'45000000-0000-0000')]");

appiumDriver.findElementByXPath("//*[contains(@RuntimeId,'45000000-0000-0000')]");

appiumDriver.findElementByXPath("//*[contains(@ProcessId,'45000000-0000-0000')]");

appiumDriver.findElementByXPath("//*[contains(@class,'45000000-0000-0000')]");

Однако со всеми этими попытками найти элемент пришло org.openqa.selenium.NoSuchElementException.

My вопрос теперь, что мне нужно написать в xpath, чтобы найти элемент через часть elementId из Inspector (или атрибута UID) и затем иметь возможность считывать значение.

1 Ответ

0 голосов
/ 24 марта 2020

Я бы попробовал этот безопасный параметр:

//*[local-name(@*)="@elementId"][starts-with(normalize-space(string(@*)),"45000000-0000-0000")]

РЕДАКТИРОВАТЬ: параметр содержит не работает, потому что elementId не является первым атрибутом элемента.

Не могли бы вы попробовать:

//*[@*="45000000"]

Если это не сработает, давайте переберем это с:

//*[contains(@*[2],'45000000')]
//*[contains(@*[3],'45000000')]
//*[contains(@*[4],'45000000')]
//*[contains(@*[5],'45000000')]
//*[contains(@*[6],'45000000')]
//*[contains(@*[7],'45000000')]
//*[contains(@*[8],'45000000')]
//*[contains(@*[9],'45000000')]
//*[contains(@*[10],'45000000')]
//*[contains(@*[11],'45000000')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...