Supported platforms
visor supports two mobile platforms:| Platform | Driver stack | Default device name |
|---|---|---|
| Android | Appium with UiAutomator2 | emulator-5554 |
| iOS | Appium with XCUITest | iPhone 17 Pro |
Runtime modes
visor can run in two modes.Real runtime
In real runtime mode, visor connects to an Appium server and interacts with an actual simulator, emulator, or device. What real runtime requires:- a reachable Appium server (or auto-start enabled)
- a booted iOS or Android target
- installed Node runtime dependencies, including Appium and WebdriverIO
- a valid app identifier or environment-based fallback
- Android
app-idmaps toappPackage - iOS
app-idmaps tobundleIdand must match an app already installed on the selected simulator or device - the Android package name and iOS bundle identifier can differ for the same product
Mock runtime
In mock runtime mode, visor does not talk to a real device. Mock mode is useful when you want to:- validate wiring and payload handling
- produce deterministic test artifacts
- exercise run and benchmark flows without device infrastructure
- screenshots are written as a valid 1x1 PNG
- UI source is written as a minimal XML document
- visibility assertions fail only when the target contains
missingornot_found
Default runtime values
When you do not set an explicit runtime value, visor resolves defaults.| Setting | Default value |
|---|---|
| Appium server URL | http://127.0.0.1:4723 |
| Android app id fallback | com.example.app |
| iOS bundle id fallback | com.example.app |
| Android default activity fallback | .MainActivity |
| Android default device | emulator-5554 |
| iOS default device | iPhone 17 Pro |
Environment variables
visor reads runtime configuration from environment variables when explicit runtime input is not provided.| Environment variable | Purpose |
|---|---|
VISOR_ANDROID_APP_PACKAGE | Android app package name |
VISOR_ANDROID_APP_ACTIVITY | Android launch activity |
VISOR_ANDROID_DEVICE | Android device or emulator identifier |
VISOR_IOS_BUNDLE_ID | iOS bundle identifier |
VISOR_IOS_DEVICE | iOS simulator or device name |
VISOR_ATTACH_TO_RUNNING | Reuse running app process (true/1/yes/on) |
VISOR_APPIUM_CMD | Command visor uses when it needs to launch Appium |
PATF_* fallbacks are only supported for the mobile runtime variables implemented in the adapter layer:
PATF_ANDROID_APP_PACKAGEPATF_ANDROID_APP_ACTIVITYPATF_ANDROID_DEVICEPATF_IOS_BUNDLE_IDPATF_IOS_DEVICEPATF_ATTACH_TO_RUNNING
PATF_* fallback for Appium command resolution.
Runtime resolution order
For scenario runs and benchmarks, visor resolves runtime settings in this order:- explicit runtime input
- scenario-level defaults where applicable
- environment variables
- built-in defaults
- platform
- device
- timeout
- artifact output directory
- server URL
- app identifier
- runtime mode
Attach mode
When you pass--attach (or set VISOR_ATTACH_TO_RUNNING=true), visor asks Appium to reuse the already running app process instead of launching from scratch.
- Android capabilities used:
noReset=true,fullReset=false,autoLaunch=false,dontStopAppOnReset=true - iOS capabilities used:
noReset=true,fullReset=false,autoLaunch=false,shouldTerminateApp=false,forceAppLaunch=false
Appium lifecycle and connectivity preflight
For scenario execution and direct action commands in real runtime mode, visor performs a preflight check against the Appium host and port. If Appium is unreachable and auto-start is enabled (default), visor attempts to launch Appium first. If Appium is unreachable and auto-start is disabled (--no-auto-start-appium), visor fails early with a target initialization error.
When visor auto-starts Appium for a command, it also stops that managed Appium process when the command completes.
You can also manage lifecycle explicitly with:
visor startvisor statusvisor stop
Current limitations
The runtime layer currently has these important limits:- no web runtime
- no desktop runtime
- no built-in device provisioning
- no multi-app orchestration within a single run
- no assertion engine beyond visibility checks