RobotActions Capabilities Reference
Every ra:* namespaced capability the grid understands. Pass these in your capabilities.alwaysMatch (W3C) or desiredCapabilities (legacy) on session create — they're stripped before being forwarded to Appium / Selenium, so the underlying drivers never see them.
New to capabilities? Start with the Capabilities Guide — a how-to walkthrough covering session-create, runtime executeScript magic, REST/WS APIs, and common patterns (headless CI, test grouping, app profiling).
Quick Reference
| Capability | Type | Default | Scope |
|---|---|---|---|
| ra:videoRecording | boolean | false | Selenium · Appium · Playwright |
| ra:liveView | boolean | true | Selenium · Appium · Playwright |
| ra:liveVideo | boolean | true | Appium |
| ra:testName | string | null | Selenium · Appium · Playwright |
| ra:testsuite | string | null | Selenium · Appium · Playwright |
| ra:appProfiling | boolean | false | Appium (Android only) |
| ra:autoFailDetect | boolean | true | Selenium · Appium · Playwright |
Capabilities in Detail
ra:videoRecording
Opt-in to record a video of the session. Recording is off by default to save disk space; set true to capture an MP4 of the entire session. Available on the session detail page when the session ends.
ra:liveView
Live noVNC video stream + dashboard live view button. Set false to disable streaming. Useful for Appium Inspector sessions where the device-side recorder conflicts with the live stream.
ra:liveVideo
Per-session opt-out for the Appium Inspector screen-mirror. When set to false, the grid strips every mjpeg* capability (appium:mjpegServerPort, appium:mjpegScreenshotUrl + their unprefixed forms) from the createSession response, the getCapabilities replay, and the persisted dashboard row — so Inspector renders no live-mirror element and Hub-stored caps stay clean across reloads. Use for headless CI runs where the mirror isn't needed.
ra:testName
Human-readable test label for Reports + Session History. Truncated to 256 characters. Combine with ra:testsuite for build / regression-suite grouping. Can also be set at runtime via executeScript('ra:job-name=...').
ra:testsuite
Parent grouping label (build ID, regression-suite name, CI job ID, etc). Powers the Reports tab Test Suite filter and per-suite rollup cards.
ra:appProfiling
Samples CPU (user/kernel), memory (totalPss), network (rx/tx bytes), and battery every ~3s during the session. Requires resolvable appium:appPackage (or appium:appActivity prefix). Charts available on the session Performance tab; raw JSONL export at GET /api/sessions/:id/profile.
ra:autoFailDetect
When the last WebDriver command in a session returns an error status (4xx/5xx), the session is automatically marked result='failed' if no explicit result was set. Disable with false if your test framework writes results explicitly via executeScript('ra:job-result=...').
Combined Example
A realistic capability set for an Appium Android session — recording on, profiling on, named test, grouped under a regression suite:
{
"platformName": "Android",
"appium:app": "path/to/app.apk",
"appium:appActivity": "com.myapp.MainActivity",
"appium:deviceName": "Google Pixel 8",
// RobotActions namespace — opt into recording + tag the run
"ra:videoRecording": true, // defaults to false — set true to record an MP4 of the session
"ra:testName": "Login — happy path",
"ra:testsuite": "regression-2026-05-15",
"ra:appProfiling": true, // defaults to false — Android only; CPU / memory / network / battery samples
"ra:liveVideo": false // defaults to true — set false to strip mjpeg* (headless CI; no Inspector mirror)
}Runtime Magic Strings
In addition to capabilities set at session create, several ra:* verbs can be called during the session via driver.execute_script(...). The proxy intercepts these and persists them server-side; the underlying driver never sees the call.
ra:job-result=passedMark the current session passed.
ra:job-result=failed:<reason>Mark the session failed with optional reason text (e.g. 'Timeout waiting for #submit'). Reason populates sessions.result_message.
ra:job-name=<test name>Set sessions.test_name from inside the test (256-char cap). Equivalent to the ra:testName capability but set per-test from the test body.
ra:testsuite=<suite name>Set sessions.test_suite from inside the test. Equivalent to the ra:testsuite capability.
ra:fail-reason=<message>Write to sessions.result_message WITHOUT changing the result column. Useful for adding context to a result already set elsewhere.
ra:profile-start / ra:profile-stopAndroid only. Start/stop runtime app-profiling samples. Idempotent. Requires ra:appProfiling: true at createSession.
Pattern: explicit pass/fail with reason
// Inside your test, mark pass/fail explicitly:
driver.execute_script("ra:job-name=Checkout flow — happy path")
# ... run the test ...
try:
assert_login_succeeded()
driver.execute_script("ra:job-result=passed")
except AssertionError as e:
driver.execute_script(f"ra:job-result=failed:{e}")