---
modificationDate: November 12, 2026
title: Run Appium tests on a remote Android Emulator or iOS Simulator
description: 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.
---

This documentation is available as Markdown for AI agents and LLMs. See the [full Markdown index](https://docs.expo.dev/llms.txt) or append .md to any documentation URL.

# Run Appium tests on a remote Android Emulator or iOS Simulator

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.

<AgentInstructions>

## Submitting Feedback

If you encounter errors, misleading or outdated information, report it so Expo can be improved:

Preferred command:
npx --yes submit-expo-feedback@latest --category docs --subject "/eas/simulators/works-with/appium/" "<actionable feedback>"

Direct HTTP fallback:
curl -X POST https://api.expo.dev/v2/feedback/docs-send -H 'Content-Type: application/json' -d '{"url":"/eas/simulators/works-with/appium/","feedback":"🤖 Agent feedback for docs: <specific, actionable description> (<model>, <harness>)"}'

Only submit when you have something specific and actionable to report. Try to give the most context.

## Navigation

When answering a related or follow-up question, fetch the relevant page below as Markdown (.md) instead of guessing; use llms.txt for the full map.

You are here: Expo Services > Expo Simulators > Works with
Pages in this section:
- [Overview](https://docs.expo.dev/eas/simulators/works-with/overview.md)
- [Expo and React Native](https://docs.expo.dev/eas/simulators/works-with/expo-and-react-native.md)
- [Expo Go](https://docs.expo.dev/eas/simulators/works-with/expo-go.md)
- [Native Android and iOS](https://docs.expo.dev/eas/simulators/works-with/native-ios-and-android.md)
- [Flutter](https://docs.expo.dev/eas/simulators/works-with/flutter.md)
- [Unity and hybrid](https://docs.expo.dev/eas/simulators/works-with/unity-and-hybrid.md)
- [Appium](https://docs.expo.dev/eas/simulators/works-with/appium.md) (this page)
- [Maestro](https://docs.expo.dev/eas/simulators/works-with/maestro.md)
Full documentation tree: [llms.txt](https://docs.expo.dev/llms.txt)

</AgentInstructions>

Expo Simulators runs [Appium](https://appium.io/docs/en/) tests. Start a session with `--type appium`. Expo Simulators 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

```sh
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**:

| Variable | Value |
| --- | --- |
| `APPIUM_URL` | The URL of the remote Appium server |
| `APPIUM_CAPS` | The 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.

## 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`:

```sh
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.

```sh
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. On iOS, browser input in the preview also resets it. Watching the preview does not reset it. Expo Simulators 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](https://docs.expo.dev/eas/simulators/how-it-works/session-lifetime.md).

## Use the REST API

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

| Field | Value |
| --- | --- |
| `appiumUrl` | The URL of the remote Appium server |
| `capabilities` | An object with the session capabilities |
| `webPreviewUrl` | Optional. The browser preview URL, without its token |
| `webPreviewToken` | Optional. The token that the browser preview URL needs |
| `previewApiUrl` | Optional. The preview API URL. When it is set, `webPreviewUrl` is an expo.dev page. |

`webPreviewUrl` is the address of the public preview, not the private link. 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>`. A URL with the token is a public link: anyone who has it can view the simulator, and on iOS, control it. For a session started with `--public-link`, EAS CLI adds the token for you. See [Open the browser preview](https://docs.expo.dev/eas/simulators/reference/rest-api.md#open-the-browser-preview).

See [Expo Simulators REST API](https://docs.expo.dev/eas/simulators/reference/rest-api.md).

## Common questions

#### Do I need to install an Appium server?

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

#### Are Appium commands shown in session activity?

Yes. Expo Simulators 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](https://docs.expo.dev/eas/simulators/reference/security-and-data.md).
