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

    CapabilityTypeDefaultScope
    ra:videoRecordingbooleanfalseSelenium · Appium · Playwright
    ra:liveViewbooleantrueSelenium · Appium · Playwright
    ra:liveVideobooleantrueAppium
    ra:testNamestringnullSelenium · Appium · Playwright
    ra:testsuitestringnullSelenium · Appium · Playwright
    ra:appProfilingbooleanfalseAppium (Android only)
    ra:autoFailDetectbooleantrueSelenium · Appium · Playwright

    Capabilities in Detail

    ra:videoRecording

    booleandefault: falseSelenium · Appium · Playwright

    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

    booleandefault: trueSelenium · Appium · Playwright

    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

    booleandefault: trueAppium

    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

    stringdefault: nullSelenium · Appium · Playwright

    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

    stringdefault: nullSelenium · Appium · Playwright

    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

    booleandefault: falseAppium (Android only)

    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

    booleandefault: trueSelenium · Appium · Playwright

    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:

    capabilities.json
    {
      "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=passed

    Mark 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-stop

    Android only. Start/stop runtime app-profiling samples. Idempotent. Requires ra:appProfiling: true at createSession.

    Pattern: explicit pass/fail with reason

    test_login.py
    // 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}")

    👋 Hi! Need help? Chat with us!

    Chat with us

    Online

    Before we start

    Share your details so we can follow up with you.