RUVIOLTAModern testing platform v3.0.1
HTML reports

See browser steps, API evidence and failures together.

Each project report keeps UI steps, API requests, assertions, captures, Verify: groups, reusable run() flows, cases, cleanup and browser failure evidence in one chronological run, including scenario-level screenshots and optional failure video.

Unified evidence

A v2 report understands both sides of the flow

UI

Browser steps

Locators, navigation, retryable waits, source lines, duration and failure screenshots and optional failure video.

API

API requests

Method, URL, status, timing and safe redacted request/response details.

✓

Verify & capture

Grouped assertions, individual child results, JSON/XPath captures and reusable outputs.

↗

Cases & nested flows

Case results, cleanup, same-project and cross-project run() trees remain expandable.

Interactive report experience

Use the dashboard preview like a real Ruviolta report

Expand scenarios and called flows, search and filter the run, open the scenario failure video or screenshot and browse previous reports. The controls below are a safe website demo only: they never read, open or delete files on your computer.

Ruviolta logo

RUVIOLTA

Test Report

At least one scenario needs your attention.

10 Aug 2026, 07:25:35 Chrome · Headed Project: API Example
Scenarios◇
3
2 passed
Passed✓
2
successful scenarios
Failed△
1
scenario needing attention
Steps⌁
22
21 passed · 1 failed
Duration◷
8.7 s
1 file
UT
tests/mixed-ui-api.utMixed UI + API flow
failed3 scenarios8.7 s
Scenario: Move from UI to API and back to UI
@mixedUiApiExample@v2
passed
✓
waitForText("body", "Example Domain")
Line 7
31 ms
✓
clickLink("Learn more")
Line 8
114 ms
✓
waitForUrlContains("iana.org")
Line 9
428 ms
✓
api("GET", "/users/{id}", { path: { id: userId } })
Line 11
42 ms
✓
expectStatus(200)
Line 16
1 ms
✓
expectHeader("content-type", /json/)
Line 17
1 ms
✓
expectJson("$.id", userId)
Line 18
1 ms
✓
captureJson("$.id") -> verifiedUserId
Line 21
1 ms
✓
visit("https://example.com/?verifiedUser=" + verifiedUserId)
Line 23
517 ms
✓
waitForUrlContains("verifiedUser=1")
Line 24
5 ms
✓
waitForText("body", "Example Domain")
Line 25
13 ms
Scenario: Reuse a prepared flow
@reusableFlow
passed
✓
run("example/tests/account.ut@prepareUser")
Line 14 · click to inspect the called flow
1.84 s
Project: API Exampletests/account.ut@prepareUserpassed
Scenario: Prepare user1.84 s
✓
visit("www.example.com/account")
Line 7
1.11 s
✓
input("#username", "demo-user")
Line 8
42 ms
✓
click("#continue")
Line 9
119 ms
✓
waitForText("h1", "Account")
Line 10
569 ms
✓
check(".account-name").contains("demo-user")
Line 15
12 ms
Scenario: Open Example and continue
@login@smoke
failed
✓
visit("www.example.com")
Line 13
571 ms
✓
waitFor("main")
Line 14
76 ms
click("//button[contains(., 'Continue')]")
Line 15

Step failure

Step failed at line 15.
Element "//button[contains(., 'Continue')]" was not visible and enabled after 5000ms.
https://www.example.com/
5256 ms
What the dashboard keeps visible

Useful evidence instead of a flat pass/fail list

UI + API step details

Expand scenarios to inspect browser actions, API requests, assertions, captures, source lines, status and duration in chronological order.

Verify, Cases & Cleanup

Grouped verification, data cases and cleanup results remain visible under the scenario that owns them.

Scenario-level failure artifacts

Failed scenarios can expose Play video and View screenshot actions without duplicating visual artifacts inside failed steps or nested run details.

Search and filters

Search files, scenarios, tags and steps, then narrow the dashboard to all, failed or passed results.

Previous report history

Open older runs for the current project, remove one saved report, or remove all previous reports while keeping the current report protected.

Worker-safe evidence

Each Worker owns its own screenshot and video artifacts. Nested run() failures stay readable without repeating the same parent failure block above the called scenario.

Storage layout

Reports stay inside the project that created them

projects/example/reports/ ├── YYYY-MM-DD_HH-mm-ss-SSS/ │ ├── report.html │ ├── report.json │ ├── screenshots/ │ └── videos/ ├── latest.html └── latest.json

Current and previous runs

latest.html and latest.json point to the latest project run. Timestamped folders preserve older report data and captured failure screenshots and videos.

The website preview above never reads, opens or deletes local report files. It only demonstrates the real Ruviolta report interface.

Controls

Choose report behavior per project

ruviolta.config.mjs
reports: {
  enabled: true,
  openAfterRun: false,
  videoOnFail: true,
},

screenshotOnFail: true,
CLI overrides
ruviolta run projects/example "@exampleDomain" --open-report
ruviolta run projects/example "@exampleDomain" --no-report