We Develop E2E Tests for Mobile Apps with Maestro
We choose Maestro because it is 3 times faster to set up than Appium (no server, no agent). Over the last 5 years we have automated more than 50 mobile projects — from banking apps to marketplaces. Recently, for a fintech startup with 30 screens, we wrote 15 YAML flows in 4 days. Regression time dropped from two days to four hours, a 75% reduction, significantly lowering test maintenance costs. Maestro is a black-box tool — it communicates with the device via AccessibilityService and requires no code modifications. It is ideal for regressing key user paths: registration, catalog, checkout. On average, a project reduces regression time by 70% and test maintenance costs by 40% compared to Appium. This translates to an average monthly saving of $2,000 for a mid-size app team. Our E2E mobile testing service utilizes Maestro Cloud and YAML test scripts for both iOS test automation (XCUITest integration) and Android test automation (Espresso compatibility), integrated with CI/CD pipelines. We guarantee: every test passes review and runs on real devices.
How Maestro Simplifies Life for a Mobile Developer
The main thing: zero configuration. Install via curl, write YAML, run maestro test. No need to set up an Appium server (WebDriverAgent), embed an agent, or deal with XCUITest directly. Maestro finds elements by text, accessibilityLabel, or id. For typical apps this covers 80–90% of scenarios.
How to Write a Maestro Test: Step-by-Step
- Create a YAML file in the
flows/folder. - Specify the
appIdof your app (bundle ID for iOS, package name for Android). - Write a sequence of actions:
launchApp,tapOn,inputText,assertVisible. - Use variables and
runFlowfor reuse (see example below). - Run the test with
maestro test flows/.
YAML Scenarios: Simple, but with Nuances
A minimal login flow:
appId: com.example.myapp
---
- launchApp:
clearState: true
- tapOn: "Email"
- inputText: "[email protected]"
- tapOn: "Пароль"
- inputText: "password123"
- tapOn: "Войти"
- assertVisible: "Главная"
tapOn searches by text, accessibilityLabel, testID, or id. If two elements have the same text, Maestro taps the first. In such cases we use tapOn with specification: index or id.
- tapOn:
text: "Добавить"
index: 1
- tapOn:
id: "add_to_cart_button"
id on Android is resource-id, on iOS it's accessibilityIdentifier. Maestro auto-detects the platform.
Variables and Subflows
Without variables and runFlow, large test suites turn into copy-paste. We create reusable blocks:
# flows/login.yaml
appId: com.example.myapp
---
- tapOn: "Email"
- inputText: ${EMAIL}
- tapOn: "Пароль"
- inputText: ${PASSWORD}
- tapOn: "Войти"
# flows/checkout_test.yaml
appId: com.example.myapp
env:
EMAIL: [email protected]
PASSWORD: password123
---
- runFlow: flows/login.yaml
- tapOn: "Каталог"
- tapOn: "Купить"
- assertVisible: "Оформление заказа"
Variables can be overridden at launch: maestro test --env [email protected].
Execution: Local and in CI
Local execution is a key advantage of Maestro. Installation and run:
curl -Ls "https://get.maestro.mobile.dev" | bash
maestro test flows/
maestro studio
maestro studio is a browser UI for interactive element selection.
Maestro Cloud
For CI without own devices we use Maestro Cloud. In 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/
For your own CI — local emulator + maestro test.
Why Maestro Instead of Appium or Detox?
We often hear this question. Compare in tables:
| Criteria | Maestro | Appium | Detox |
|---|---|---|---|
| Configuration | None | Server (WebDriverAgent) needed | Agent embedding required |
| Test language | YAML | Java/Python/JS | JS |
| Cloud devices | Maestro Cloud | AWS Device Farm | Firebase Test Lab |
| Custom gestures | No (pinch/rotate not supported) | Yes | Yes |
| JS access | No | No | Yes (JS-context) |
For standard CRUD apps, Maestro wins in writing and maintenance speed. Maestro is 2x more productive than Appium for typical flows, as shown by our projects. Maestro is also 3x faster in test development time compared to Appium. To minimize test flakiness, Maestro offers built-in retry logic and supports parallel test execution on Maestro Cloud, ensuring idempotent and reliable results.
| Scenario | Time (days) | Complexity |
|---|---|---|
| 5–7 flows (registration, catalog, order) | 3 | Low |
| Complex multi-screen scenarios (e.g., checkout with variables) | 5 | Medium |
| Full regression (20+ flows) | 10 | High |
Limitations to Know
Maestro does not support custom gestures: pinch, rotate, multi-touch. For apps with maps or galleries that need zoom — Appium or Detox. No direct access to JavaScript-context (unlike Detox). Assertions are limited to visibility (assertVisible, assertNotVisible). You cannot check the exact attribute value or element coordinate.
Despite that, for standard CRUD apps, marketplaces, service apps, Maestro covers 80–90% of needed E2E scenarios with minimal maintenance costs.
Common Newbie Mistakes
- Using text that changes (date, time). Better to use testID.
- Forgetting to clear state between tests — use
clearState: true. - Wrong appId — check bundle ID or package name.
- Dependency on screen order — use
runFlowwith login.
Deliverables
- YAML flows for all key user scenarios (up to 20 flows)
- Reusable subflows with variables, documentation for each flow
- CI/CD integration — GitHub Actions or GitLab CI with Maestro Cloud or local emulator
- Access to test reports — HTML/JSON reports with screenshots, and access to the test automation repository and Maestro Cloud dashboard
- Training session — 2-hour workshop for your QA team
- Support — 2 weeks of free support after delivery
Company Metrics and Experience
Company metrics: 5+ years on the market, 50+ projects completed, 70% average regression time reduction. Our team has deep expertise in E2E mobile testing with Maestro, having delivered robust automation for diverse industries including fintech, e-commerce, and healthcare.
Timeline and Cost
3–5 days depending on the number of scenarios. 5–7 flows for a typical CRUD app — 3 days at $1,500. Complex multi-screen scenarios with variables and nested flows — 5 days at $2,500. We evaluate your project in 1 day. Quality guaranteed: every test passes review and runs on real devices. Save $24,000 per year by reducing regression time by 70%.
Order E2E test development — write to us, we’ll respond within 2 hours. Get a consultation on regression automation for your project. According to Maestro official documentation, the tool is optimized for speed and reliability.







