Performance budgets that fail the test.
LCP, CLS, INP, long tasks and the JavaScript heap, measured in every test. Over the budget, the test fails.
Test any web page in Chrome, Edge, Firefox or Safari, on your machine or on a browser farm. Nothing to add to the page, and the same tests, runner and AI as for your devices.
In your page: nothing. No script, no SDK, no build step.
| Device | Site | Firmware | Status | Last seen |
|---|---|---|---|---|
AUR-T2-0457 | Maple Court 3 | 4.1.3 → 4.2.0 | Updating | just now |
AUR-T2-0193 | Oak Street 14 | 4.2.0 | Updated | 2 min ago |
AUR-T2-0712 | Harbor View 7 | 4.2.0 | Updated | 3 min ago |
/rollouts/4.2.0button "Pause rollout"status "Paused"LCP 1.4 s of 2.5 sRanveo drives the browser over the DevTools Protocol or WebDriver, in its own temporary profile. Nothing goes into your page, and your cookies and clipboard stay untouched.
LCP, CLS, INP, long tasks and the JavaScript heap, measured in every test. Over the budget, the test fails.
| Method | Path | Status | Time | Rule |
|---|---|---|---|---|
| GET | /rollouts/4.2.0 | 200 | 118 ms | |
| GET | /api/rollouts/4.2.0 | 200 | 36 ms | |
| GET | /api/fleet/health | 503 | 3 ms | rule: failed |
| POST | /api/rollouts/4.2.0/pause | 200 | 2.0 s | rule: delayed |
| GET | /api/alerts | 200 | 41 ms | rule: changed |
A rule gives a made-up, failed or delayed answer, or changes the real one. Offline and throttling too, in Chrome and Edge.
<div class="rollout-actions">
<button data-testid="pause-rollout"
type="button">Pause rollout</button>
<span role="status">In progress</span>
</div>data-testid, else id, else name; ARIA roles in Ranveo’s words; Shadow DOM and frames searched too.
logrollout 4.2.0: 8,486 of 12,480 updated
warnResizeObserver loop completedallowed
errorTypeError: cannot read “stages” of undefinedfails the step
{ "errors": { "fail": true,
"allow": ["^ResizeObserver loop"] } }A swallowed exception is a bug even when the screen looks right. Known noise goes in an allow list.
Import them as Ranveo tests, or keep running them: @ranveo/playwright-reporter sends their results to Ranveo for history, bug tracking and reports. WebdriverIO results too.
test('adds a todo', async ({ page }) => {await page.goto('/');await page.getByPlaceholder('What').fill('milk');await page.keyboard.press('Enter');await expect(page.getByTestId('todo')).toHaveText('milk');});"Adds a todo""/"text "What""milk"Entername "todo" text "milk"ranveowall import-playwright tests/One scenario, run with both on 2 November 2026, and what a team gets with Ranveo that Playwright leaves to you.
| Same scenario · 2026-11-02 | Ranveo | Playwright |
|---|---|---|
| Green, a delayed page included | 16/16 | 16/16 |
| A changed UI, reported after | 32.5 s6× sooner | 191.3 s |
| Run time, no trace | 3.0 s | 3.8 s |
| Run time, traces of failed tests | 5.3 s | 3.9 s |
| Web Vitals with budgets | built in | a separate tool |
| Reports | a team server | HTML, per run |
| A demo video of the test | MP4, with cursor | – |
| Device, web and mobile app in one test | yes | the web part only |
Testers and product people use the live editor, step recording or the AI chat. Developers get Python and TypeScript clients and pytest export.
History, test health, a scheduler, environments, secrets, PDF reports and approval of reference images.
Failures with the same cause are grouped into one bug, and sent on to Jira, GitLab or GitHub.
A second AI audits every test the AI writes, by looking at its screens.
It runs on your own AI subscription, with no credits to buy. With a local model (Ollama), all of it works offline.
Clipped or overlapping text, in any language, found from the page’s elements, not from pixels.
The runner, the server and the MCP server come as one file. No Node, no npm.
Unlimited users, and more apps cost nothing extra. The free tier covers the web, commercial use included.
Headless Chrome, Chromium and Edge out of the box. Firefox and Safari over WebDriver. BrowserStack, Sauce Labs, TestMu AI or BitBar with one setting.
farm=browserstackCredentials stay in secret project variables, and the session id and recording link go into the test log. Ranveo opens no tunnel.
A rule gives a made-up, failed or delayed answer, or changes the real one.
Emulate them in a step, and check the page follows.
axe-core’s WCAG 2.1 A and AA rules, frames from other origins included.
Web components and embedded frames, payment forms included, are searched like the page.
A new tab comes to the front by itself. One step closes it.
Put ${vars.stack} in the address and pick the environment per run.
Any address: http, https or a local file.
The run picks the address of the environment.
The farm’s user and key come from secret variables.
# 1 · point it at a page
$ ranveowall test tests \
--web http://localhost:3000/ --viewport 1024x768
# 2 · one profile, every environment
$ ranveowall add-profile --profile-id web \
--platform web --set 'url=${vars.stack}/launcher'
$ ranveowall test tests --profile-id web \
--var stack=https://test.example.com
# 3 · or run it on a browser farm
$ ranveowall add-profile --profile-id shop-bs \
--platform web --connection webdriver \
--set farm=browserstack --set 'key=${vars.bs_key}'Ranveo reads the page’s DOM and accessibility roles, and acts like a user: real mouse and key events, at the visible part of the target.
data-testid, else id, else the name attributearia-label, a field’s value or placeholder, or the visible textwindow.ranveoScreen, else the hash route, else the pathwindow.ranveoSubjects; without it, check the screen or call a command.<button>becomesbutton<a href>becomeslink<input>becomesinputtextboxbecomesinput<select>becomesdropdowncomboboxbecomesdropdown<li>becomesitemoptionbecomesitem<dialog>becomesdialog<progress>becomesprogressheadingbecomestext<svg>becomesimage{ "tap": { "name": "save" } }
{ "tap": { "role": "button", "text": "Save" } }
{ "tap": { "text": "Pay", "within": { "name": "payment" } } }conformance checks pass on the web reference app. The one that doesn’t, clock, needs a virtual clock, and a browser runs on real time.
No. If you want, the page can tell more through a few global functions: its screen name, state values, commands and when it’s busy.
No. It uses the browsers and drivers installed on the machine, or a farm’s.
No. The farm opens a public address, or one reached through its own tunnel, such as BrowserStack Local.
Yes, when the page lists the objects it draws in window.ranveoObjects: names, roles, texts and boxes.
Every platform runs during the 30-day trial, browser farms included.