Overview
Run your Appium tests on real iPhones and real Android phones, your Espresso tests on real Android phones, and your XCUITest tests on real iPhones and iPads. Appium uses the same connection and access key as your Selenium suite.
Run your Appium tests on real iPhones and real Android phones, your Espresso tests on real Android phones, and your XCUITest tests on real iPhones and iPads. Nothing to buy, charge or update.
Already running Selenium here? Same address, same access key. Only the capabilities change.
capabilities: {
platformName: "iOS", // or "Android"
"appium:app": "farm://app-sample", // our demo app, nothing to upload
}That is the whole difference. We pick a device, keep it for you alone, and clean it afterwards.
Want a particular phone? The capability generator lists what we have right now.
Want a simulator or emulator instead of real hardware? See Real devices and virtual ones.
Already have Espresso tests for your Android app? Run them as they are — see Espresso on real devices. XCUITest UI tests for your iOS app? See XCUITest on real devices.
Four ways to test on a phone
Pick one — your own app with Appium, the phone's browser, or your existing Espresso or XCUITest suite:
| You want to test | Send | Guide |
|---|---|---|
| Your app | appium:app — farm://app-sample to try it now, or your own farm URL | Uploading your app |
| A website on a phone | browserName — Safari on iOS, Chrome on Android | Mobile browsers |
| Your Android app, with your Espresso tests | Your app and androidTest APKs to the /espresso/v1 API — no Appium involved | Espresso on real devices |
| Your iOS app, with your XCUITest tests | Your .ipa and zipped -Runner.app to the /xcuitest/v1 API — no Appium involved | XCUITest on real devices |
For an Appium session, send one of appium:app or browserName. Sending both, or neither, comes back as a clear error at session start rather than a run that quietly tests nothing.
What you get
Real devices
Physical iPhones and Android phones by default; emulators and simulators only when you ask with virtual: true.
Your Appium client
WebdriverIO, java-client, appium-python-client — whatever you already use.
Live view
Open the session while it runs and watch the phone. Appium only.
Logs
Device logs and the Appium server log for every session.
Video
An MP4 of the whole run. Add testkase:options.recording.
HAR capture
A real HAR file from a real phone. Add testkase:options.network. Appium only.
Every session page also has a Commands tab, listing every step your test took.
And a History button, comparing this run with earlier runs of the same test.
Finding your session afterwards
App runs land in Mobile Sessions.
Espresso and XCUITest builds land in Mobile Apps → Runs, one run per build.
Browser runs land in the main Sessions list, with your desktop runs. They test a browser, so they sit with the other browser tests.
Questions
▶Can I report pass/fail from my test suite?
Yes. It works exactly as it does on Automate Browser:
driver.executeScript("testkase-name=Login with valid credentials");
driver.executeScript("testkase-status=passed");A session shows Failed if any test in it failed, and passed otherwise.
▶Do I get crash reports?
On Android, yes. On iOS, not yet.
If an iOS app crashes you still get the recording and the device log. You do not get the crash file.
▶Why is my downloaded video square?
The player in your dashboard shows the phone correctly.
The downloaded file is square, with the phone centred in it. That is what lets the video survive the device rotating mid-test without cutting anything off.
▶Can I run headless?
No. A real phone has a real screen, so there is nothing to hide. Sending headless is refused rather than ignored.
