Appium. Стратегії пошуку елементів для мобільного тестування

Усі статті, обговорення, новини про тестування — в одному місці. Підписуйтеся на DOU | QA!

Всім хелоу, написав маленьку тему про пошук локаторів в мобілці. Appium+Python і таке інше.

Вступ

В автоматизації тестування мобільних застосунків, ефективність виявлення UI елементів є одним з вирішальних аспектів. Проблеми з локалізацією елементів можуть серйозно підірвати стабільність тестів, призводячи до збоїв.

Ключ до успішного пошуку лежить у використанні унікальних ідентифікаторів та уникненні опори на змінні атрибути. Знання внутрішньої логіки застосунку та його UI архітектури дозволяє вибудовувати міцну стратегію тестування.

Appium, зі своєю підтримкою різноманітних локаторів, від ідентифікаторів до класів і XPath, допомагає у пошуку найбільш ефективного шляху до елемента. Оптимізація процесу пошуку не лише зменшує час на виконання тестів, але й забезпечує їхню надійність і стабільність, підвищуючи якість автоматизованого тестування.




Є ряд пасток, які я б порадив уникати:

  • Спроба знаходити елементи по ненадійним, змінюваним атрибутам.
    Орієнтування на атрибути, які можуть динамічно змінюватися в різних версіях застосунку або під час його використання (наприклад, текст, що залежить від локалізації), збільшує ризик того, що тести перестануть бути актуальними і почнуть падати.
  • Використання неунікальних селекторів.
    Спираючись на загальні ідентифікатори, які можуть відповідати кільком елементам, ми ризикуємо отримати невірний елемент, що призводить до невдалих тестів. Завжди краще використовувати унікальні ідентифікатори, щоб однозначно визначити цільовий UI елемент.

Tools в яких я шукаю елементи

Коли я шукаю селектори, то обов’язково їх перевіряю.
Використовую я загальний інструмент Appium Desktop Inspector — Графічний інтерфейс Appium, який включає інструменти для інспектування UI елементів.

Є ще окремі, такі як:

Xcode Accessibility Inspector — частина Xcode, яка дозволяє перевіряти Accessibility атрибути та інші властивості UI елементів в iOS.

Android Studio Layout Inspector — допомагає візуалізувати та розуміти, як виглядає і поводиться ваш UI під час виконання.

Розбір пошуку елементів

Для пошуку елементів ми будемо використовувати як загальні локатори, так і окремі під iOS та Android.

Розглянемо приклад пошуку

driver.find_element(AppiumBy. ID, «test»)

driver.find_element: Використовуємо WebDriver для керування мобільним застосунком і метод find_element для пошуку одного елемента в інтерфейсі користувача мобільного застосунку.

AppiumBy: Це клас, що визначає різні стратегії пошуку елементів, такі як ID, XPath, name тощо.

ID: Це стратегія пошуку, що використовується для ідентифікації елемента за його унікальним ідентифікатором (ID).

«test»: Це значення ID елемента, який потрібно знайти. У цьому контексті, find_element буде шукати елемент з ID, що відповідає рядку «test».

Таким чином, виклик driver.find_element(AppiumBy. ID, «test») ініціює пошук елемента в мобільному застосунку з унікальним ідентифікатором «test» і повертає об’єкт, що представляє цей елемент, якщо він знайдений. Цей об’єкт потім можна використовувати для взаємодії з елементом, наприклад, клікати по ньому або отримувати інформацію з нього.

Кроссплатформенні стратегії пошуку:

ID:
Знаходження елемента через його унікальний ідентифікатор вважається оптимальним підходом, оскільки кожен елемент має властивість ID, яка не повторюється.

driver.find_element(AppiumBy. ID, «quiz»)

XPath:
Дозволяє виконувати пошук елементів за допомогою виразів XPath. Це ефективний метод пошуку, проте він може бути повільнішим порівняно з іншими стратегіями.

driver.find_element(AppiumBy. XPATH, «//android.TextView[@text=’Some text’]»)

Accessibility ID:

Використовується для пошуку елемента за атрибутом доступності, який допомагає користувачам з обмеженими можливостями у використанні застосунків.

driver.find_element(AppiumBy. ACCESSIBILITY_ID, «accessibility_id»)

Class Name:

Пошук елементів за іменем класу. Це може бути корисним, коли інші ідентифікатори недоступні або не є унікальними.

driver.find_element(AppiumBy. CLASS_NAME, «android.widget.EditText»)

Android стратегія пошуку:

UIAutomator:

Стратегія локатора, специфічна для Android. Дозволяє використовувати Android UIAutomator API для пошуку елементів.

driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, " new UiSelector().className("ScrollView")«)

iOS стратегія пошуку:

Class Chain:

Схожий на XPath для iOS і дозволяє формувати запити для пошуку елементів, використовуючи ієрархію класів і властивостей елементів.

driver.find_element(AppiumBy. IOS_CLASS_CHAIN, ’**/XCUIElementTypeButton[1]’)

Predicate String:

Використовується для пошуку елементів на основі властивостей елементів. Він дозволяє використовувати логічні оператори, такі як AND, OR для формування запитів.

driver.find_element(AppiumBy. IOS_PREDICATE, ’type == «XCUIElementTypeButton» AND visible == 1′)

Маленький підсумок

Освоєння різних стратегій локаторів, таких як ID, XPath, Accessibility ID, Class Name, а також специфічних для платформи особливостей, як UIAutomator для Android та Predicate String чи Class Chain для iOS, відкриває широкі можливості для створення більш точних та ефективних тестів.

Однак, важливо пам’ятати, що успіх автоматизації не лише в технічних деталях пошуку елементів, але й у стратегічному підході до автоматизації тестування, який включає постійне вдосконалення тестових сценаріїв та адаптацію до змін у застосунку. Регулярне оновлення та оптимізація локаторів, а також використання найкращих практик та паттернів проектування, дозволять вашим тестам залишатися стабільними, навіть у динамічному світі мобільних застосунків.

👍ПодобаєтьсяСподобалось3
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Це ефективний метод пошуку, проте він може бути повільнішим порівняно з іншими стратегіями.

Цей метод взагалі не ефективний, використовувати Xpath потрібно тільки в крайніх ситуаціях (Для IOS нативних аплікацій час виконання більше ніж в два рази повільніший ніж сlass сhain чи predicate).

Набагато менше ефективний, ніж сlass сhain чи predicate для iOS. Але я написав це в виразі кроссплатформенних стратегій і він гнучкий. Тому і розділив на 3 підпункти.

Підписатись на коментарі