Розробка E2E-тестів для мобільних додатків (Maestro)
Maestro — найбільш молодий із E2E-інструментів для мобільних додатків, але вже займав нішу завдяки одній якості: тести пишуться на YAML, запускаються однією командою та не вимагають налаштування Appium-сервера, XCUITest-раннера або вбудовування агента у додаток. Це чорна скринька тестування у чистому вигляді — інструмент спілкується з пристроєм через Accessibility API та не знає нічого про внутрішню архітектуру додатку.
YAML-сценарії: просто, але є нюанси
Мінімальний флоу авторизації:
appId: com.example.myapp
---
- launchApp:
clearState: true
- tapOn: "Email"
- inputText: "[email protected]"
- tapOn: "Password"
- inputText: "password123"
- tapOn: "Увійти"
- assertVisible: "Home"
tapOn ищет елемент по тексту, accessibilityLabel, testID або id. Порядок пошуку — зліва направо у ієрархії Accessibility. Якщо на екрані два елементи з однаковим текстом — Maestro натисне на перший, що може бути не те, що потрібно. У таких випадках використовуйте tapOn з уточненням:
- tapOn:
text: "Додати"
index: 1 # другий елемент з цим текстом
Або через id:
- tapOn:
id: "add_to_cart_button"
Важливо: id на Android — це resource-id (com.example.app:id/add_to_cart_button), на iOS — accessibilityIdentifier. Maestro автоматично визначає платформу.
Змінні та підфлоу
Maestro підтримує змінні та вызов вкладених флоу — без цього великі тест-сьюти перетворюються на копіпаст:
# flows/login.yaml
appId: com.example.myapp
---
- tapOn: "Email"
- inputText: ${EMAIL}
- tapOn: "Password"
- inputText: ${PASSWORD}
- tapOn: "Увійти"
# flows/checkout_test.yaml
appId: com.example.myapp
env:
EMAIL: [email protected]
PASSWORD: password123
---
- runFlow: flows/login.yaml
- tapOn: "Каталог"
- tapOn: "Купити"
- assertVisible: "Оформлення замовлення"
runFlow дозволяє збирати складні сценарії з переиспользуємих блоків. Змінні переопишуються при запуску: maestro test --env [email protected].
Запуск: локально та у CI
Локальний запуск без додаткових налаштувань — головна перевага Maestro:
# Встановлення
curl -Ls "https://get.maestro.mobile.dev" | bash
# Запуск одного тесту
maestro test flows/login_test.yaml
# Запуск всієї директорії
maestro test flows/
# Режим студії (UI з live preview)
maestro studio
maestro studio запускає браузерний UI, що показує ієрархію Accessibility у реальному часі та дозволяє інтерактивно обирати елементи. Для написання тестів — швидше, ніж ручний підбір локаторів.
Maestro Cloud
Для CI без власних пристроїв — Maestro Cloud (платний сервіс від творців):
maestro cloud --apiKey $MAESTRO_CLOUD_API_KEY flows/
Завантажує додаток та флоу-файли, запускає на реальних пристроях у хмарі, повертає звіт зі скриншотами. Інтеграція з GitHub Actions:
- name: Run Maestro tests on Maestro Cloud
uses: mobile-dev-inc/action-maestro-cloud@v1
with:
api-key: ${{ secrets.MAESTRO_CLOUD_API_KEY }}
app-file: app/build/outputs/apk/debug/app-debug.apk
flows-file: flows/
Для самостійного CI (без Maestro Cloud) — локальний емулятор + звичайний maestro test у pipeline.
Обмеження, які потрібно знати
Maestro не вміє кастомні жести: pinch, rotate, multi-touch. Для додатків з картами або галереєю, де потрібен зум — використовуйте Appium або Detox.
Немає прямого доступу до JavaScript-контексту (на відміну від Detox). Якщо потрібно перевірити стан Redux store або викликати метод — не отримаєте без обходних шляхів (наприклад, через deep link з тест-командою).
Assertions обмежені видимістю (assertVisible, assertNotVisible) та наявністю тексту. Перевірити точне значення атрибута або координату елемента — неможливо.
Незважаючи на це, для стандартних CRUD-додатків, маркетплейсів, сервісних додатків Maestro охоплює 80–90% потрібних E2E-сценаріїв з мінімальними витратами на підтримку.
Що включено
- Написання YAML-флоу для ключових користувацьких сценаріїв
- Налаштування змінних та переиспользуємих підфлоу
- Інтеграція у CI (GitHub Actions / GitLab CI)
- Налаштування запуску через Maestro Cloud або локальний емулятор
- Документація по додаванню нових тестів
Строки
3–5 днів в залежності від кількості сценаріїв. 5–7 флоу для типового CRUD-додатку — 3 дні. Складні многоекранні сценарії зі змінними та вкладеними флоу — 5 днів. Вартість розраховується індивідуально.







