How it connects
Install and connect
Get the standalone Appium driver and follow its README for setup and a runnable Python sample. Repository access is required. Use Node 24+ and npm 10 or newer; install before loading runtime credentials:revyl Appium driver on npm yet; use the source install
above rather than appium driver install revyl. Contact
Revyl support if you need repository access.
Start or select a running Revyl session with your app already installed and
launched. Creating a session uses your organization’s cloud resources. Keep
the session ID returned by the quickstart.
Provide REVYL_API_KEY to the Appium server through your secret manager or CI
environment, then run:
http://127.0.0.1:4723 and use these
capabilities instead of its standard native-driver capabilities:
"iOS" for an iOS session. A session ID is not an ADB serial or simulator
UDID. Capabilities that request installation, reset, browser automation, or
another driver’s behavior are rejected.
Which existing test commands work?
Screenshots must be non-interlaced PNGs of at most 16 megapixels. Backend
responses are bounded to 16 MiB.
XPath, iOS predicates/class chains, visibility assertions, page source,
browser/WebView contexts, W3C actions,
mobile: scripts, and arbitrary execute scripts are not supported. A suite
using these needs adaptation or its existing execution environment.
Find an element again after every tap, text input, app launch, or hierarchy
change. The native API does not expose stable element handles, so the driver
deliberately raises stale-element errors instead of reusing old coordinates.
Dynamic screens may need test changes. The hierarchy check and coordinate
action are not atomic; avoid destructive flows and concurrent controllers.
Handles are never re-resolved by selector. Identical-looking replacement nodes
or changes that occur and revert between observations cannot be detected.
addValue to
avoid the unsupported clear command that setValue may invoke first. Native
input taps the field before typing without clearing it, which can move the
caret or change the selection. Appending at the end is not guaranteed; use an
initially empty field for the smoke example.
Clear, install, and reset remain unsupported. A coordinate-based clear cannot
verify that the same editable target became empty, and restarting an app is not
a data reset. The driver rejects these operations rather than approximating them.
The current text-input path may include typed text in action reports; use
non-sensitive test data, not credentials.
Native gestures
Each execute command takes exactly one options object. These are Revyl contracts, not UiAutomator2 or XCUITestmobile: commands:
Evidence and cleanup
Inspect the test’s actual assertions and screenshots before claiming a pass. Native actions use the existing Revyl action-report path withAppium agent
attribution. A screenshot or a successful HTTP request alone does not prove
your test passed. A timed-out action may already have executed; the driver
does not retry it. Worker/device providers can still retry internally, so this
is not an end-to-end at-most-once guarantee.
Always quit the Appium session in your test’s cleanup. Then the job that owns
the cloud allocation must separately release it: