This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.

Run Appium tests on a remote Android Emulator or iOS Simulator

Edit page

Start an appium Expo Simulators session and connect your existing Appium client or test suite with the APPIUM_URL server URL and APPIUM_CAPS capabilities.


Expo Simulators runs Appium tests. Start a session with --type appium. EAS provisions an Appium server next to the remote device and gives you its URL and capabilities. Your Appium client connects to that server as it does to a local one.

Start an Appium session

Terminal
- eas simulator:start --platform ios --type appium --name "Checkout flow tests" --max-duration-minutes 30 --non-interactive

EAS CLI writes these values to .env.eas-simulator:

VariableValue
APPIUM_URLThe URL of the remote Appium server
APPIUM_CAPSThe session capabilities, encoded as JSON

An Appium session does not also provision agent-device or Argent. The session includes a browser preview. The session page on expo.dev shows an Open preview button that opens the browser preview in a new tab. Android support is still in development, so some features that work on iOS may not work on Android yet.

Run your Appium client

eas simulator:exec loads the variables, then runs your command. Configure your client to read the server URL from APPIUM_URL and the capabilities from APPIUM_CAPS:

Terminal
- eas simulator:exec <appium-client> [args...]

Replace <appium-client> with the command that runs your test suite.

Install the app with start flags

The start flags --build-id, --build-fingerprint, --application-archive-url, and --expo-go install and launch the app for all session types, including appium. The --launch-arg and --open-url flags also apply to an appium session. They require one of the application source flags.

Terminal
- eas simulator:start --platform ios --type appium --build-id <build-id> --name "Checkout flow tests" --non-interactive

Limit the session length

Controller activity from agent-device, Argent, or Appium resets the idle timer. Browser preview activity does not. EAS records Appium commands as session events, so a session that uses --max-idle-time-minutes stays active while your tests send commands. Use --max-duration-minutes to set an upper limit. See How long an Expo Simulators session runs.

Use the REST API

Create the session with "type": "appium". When the session is ready, remoteConfig contains:

FieldValue
appiumUrlThe URL of the remote Appium server
capabilitiesAn object with the session capabilities
webPreviewUrlOptional. The browser preview URL, without its token
webPreviewTokenOptional. The token that the browser preview URL needs
previewApiUrlOptional. The preview API URL. When it is set, webPreviewUrl is an expo.dev page.

When webPreviewToken is present, webPreviewUrl does not open without it. When previewApiUrl is set, add the token as a URL fragment: <webPreviewUrl>#token=<webPreviewToken>. Otherwise, add it as a query parameter: <webPreviewUrl>?token=<webPreviewToken>. EAS CLI adds the token for you.

See Expo Simulators REST API.

Common questions

Do I need to install an Appium server?

No. EAS runs the Appium server for the session. You need only an Appium client.

Are Appium commands shown in session activity?

Yes. EAS records Appium commands as session events with the producer appium. eas simulator:events shows them together with activity from agent-device and Argent.

Is the Appium URL a secret?

Yes. Treat APPIUM_URL, APPIUM_CAPS, and remoteConfig as secrets. Do not commit .env.eas-simulator or print its values in CI logs. See Expo Simulators security, permissions, and data retention.