t.me/atinfo_chat Telegram группа по автоматизации тестирования

Тестирование. Как построить локатор Xpath для Appium?

Теги: #<Tag:0x00007f9afa1136f8> #<Tag:0x00007f9afa113568> #<Tag:0x00007f9afa113450> #<Tag:0x00007f9afa113310> #<Tag:0x00007f9afa1131d0>

Автоматизирую гибридное Android приложение. Использую Appium.
Подскажите, как построить Xpath из UI? К примеру имею FrameLayout(1)/ScrollView(0)/LinearLayout(0)/LinearLayout(3)/EditText(0)

А у этого элемента нет каких-нибудь свойств text, content-desc или id может есть?
Я так понимаю, что на экране у вас не один элемент EditText? Если совсем больше не к чему прицепится, то собирайте в коллекцию эти элементы по класснейму(можно и с помощью XPath это сделать - //android.widget.EditText) и выбирайте нужный по индексу

Да, спасибо) //android.widget.LinearLayout[@index=‘3’]/android.widget.EditText[@index=‘0’]" прошло

а //LinearLayout[3]/EditText[0] разве не рабортает ?

ну да, работает)

Отлично, но использование xpath в аппиуме совсем не лучшая идея. Оно может быть как-то оправдано для Андроида версии ниже 4.4. Если у вас приложение на андроиде выше или равно 4.4, то вам должны быть доступны айдишники для нативних элементов. И тогда можно просто делать findElement(By.id(“com.android.calculator2:id/digit5”));

1 Симпатия

мне кажется для более качественной записи элемента в пейдже, стоит себя ограничить какими-то правилами при поиске элементов:

  1. искать по resource_id или content-desc (чаще всего resource_id доступен)
  2. комбинировать text или index с resource_id
  3. для List обычно использую resource_id + index
  4. xpath - либо вообще не юзать, либо юзать только тогда, когда больше не за что зацепиться

Можно пример использования resource_id + index?
У меня на странице 30 элементов с одинаковым id, индекс выставляется только тем, что в зоне видимости (если сделать swipe , то все индексы смещаются. Нативное приложение под Android