ci

Your mobile tests, in any CI, with one command.

The .mob scripts and Maestro flows you run locally work the same way in GitHub Actions or any other CI, and Workflows run there on the fast Jev and Clef runners. Each run keeps the screen and UI tree at every step, plus a video and device logs when you turn them on, so a failure tells you what happened.

Run tests2m 57s
Running 2 test(s) on mobai-sim-run
  checkout
    ✓   4.2s  app "run.mobai.shelf" fresh
    ✓   1.9s  tap "Sign in"
    ✓   0.6s  wait_for "Email"
    ✗  85.8s  tap "Continue"
             no element found matching predicate: "Continue"
  sign-in
  FAIL  checkout  (103.8s)
  PASS  sign-in  (29.3s)
1 passed, 1 failed in 133.1s
Error: Process completed with exit code 1.
one command

Set it up in a minute

mobai-ci runs Workflows, .mob scripts and Maestro YAML, including Maestro flows on a real iPhone. Install it as a GitHub Action or with one curl command on macOS and Linux.

bash
mobai-ci test ./tests
yaml
- uses: MobAI-App/mobai-ci@v1
where devices live

The test doesn't care where the device is

  • iOS simulators on macOS runners
  • Android emulators on Ubuntu runners
  • A real iPhone or Android phone on a self-hosted macOS or Linux runner
  • A phone on another machine, over Tailscale (Pro)
  • BrowserStack, Sauce Labs, AWS Device Farm (Pro)
what every run leaves behind

A failed test should tell you what happened

  • A video of every test, with --recording
  • Device logs for every test, with --device-logs
  • A screenshot and the UI tree at every step
  • JUnit and Allure reports for your CI
  • The device itself: with --hold-on-failure, join the failed simulator from the MobAI app (Pro)
live viewfree with an account

Watch it run. Keep it when it breaks.

Open the CI device from the MobAI app while the test runs. Free with a MobAI account.

With Pro, a failed test keeps the device open for as long as you set with --hold-on-failure, so you can join it, tap around, read the UI tree and see what went wrong.

Devices
CI Devices1 device
Interlap01/shelf-demo · main · run 3iOSFAILED
CI run failed Interlap01/shelf-demo · main · run 3
test: checkout
step: tap "Continue"
error: no element found matching predicate: "Continue"
Open the device
The held CI device on the Shelf sign-in screen, where the test failed: the button now reads Get started, not Continue
dashboardPro

Every run in one place

The cloud dashboard keeps your team's runs:

  • Pass rate and run time over time
  • Each test's history
  • Every failure with its screenshot, UI tree and logs

Runs from the desktop app and from CI land in the same project, shared with your team. Pro includes 5 GB of run files. Your local runs show up in the app's dashboard for free.

speed

Finish the suite sooner

Split the suite across runners with sharding. On a self-hosted Mac, simslim lets more simulators run side by side.

Put your mobile tests in front of every merge.