Early access The free plan is live — unlimited tests, no card, yours to keep Get started →
How it works

How QAright records, heals and reports on Playwright tests

Click through your app in a real browser. QAright captures the intent behind each action, not just the coordinates. Four things happen to a test, in order: it is recorded, it repairs itself when the page moves, it hears about drift before then, and it reports in a way someone will read.

Record by using the app

Open your application in a real browser and use it. Your clicks become steps in plain English, readable by anyone on the team — "Sign in as a policyholder", "Start a new claim" — and the same list can be flipped to a detailed view showing the resolved Playwright locator behind every step, with the fallbacks standing behind it. Nobody has to write code.

What makes the recording worth keeping is what is captured underneath each click:

Anything that should not be baked into a test is not. URLs and credentials live in an environment; named datasets live in a data profile; and {{env.KEY}}, {{data.key}}, {{faker.EMAIL}} and {{capture.VAR}} resolve at run time, so the same suite runs against local, UAT, staging or production.

Why most record-and-playback tools rot, and what this one does differently: Record and playback, done properly.

Repaired at run time

Runs stream live. You can pause between steps, inspect the variables captured so far, edit a step that is about to run, and resume without restarting. Runs go across Chromium, Firefox and WebKit, headed or headless, and in parallel.

When a step's primary locator misses, the run does not stop and it does not guess. It works down a fixed cascade and reports which phase found the element: the primary locator, then the remaining fallback candidates in rank order (each probed for presence and uniqueness), then a lookup against the crawled model of your application, then a semantic scan of the live page against the recorded snapshot, and last — only if you have enabled it — an AI-assisted repair through a model you configure.

The cascade is deliberately conservative. It never heals an assertion: a broken path to an element is recoverable, but an element found in the wrong state is a real failure and is reported as one. It never resolves ambiguity by guessing, never invents a candidate that capture did not record, and never silently rewrites your test — a fallback is promoted to primary only after it has worked three runs running, and the promotion is written to the audit log.

The full chain, and the four things it refuses to do: How self-healing test automation actually works.

Drift, before the suite goes red

Healing catches a change at the moment a test hits it. Guardian catches it earlier. On a schedule, or on every deploy, it re-walks your recorded pages and compares what it finds against the DOM snapshots captured when you recorded, then rolls what moved up to a risk level per test — blocking, minor, or clean — so you can tell a cosmetic change from one that will fail the suite on its next run.

What a scan actually compares, and what it deliberately ignores: What test drift detection actually catches.

The whole picture

Every result explains itself. A failure comes with the cause in plain English — the id went dynamic, a cookie banner was covering the button — and a full-page screenshot of the moment it happened, with an optional per-step timeline. Any repair the engine made is written down where you can read it back and disagree with it, so a test that only passes because it was healed is visible rather than silently green.

Analytics sit on top: pass rate, execution volume and duration over any window, the pass/fail trend, the slowest steps, the cases that are flaky and the ones that are consistently broken, with PDF and CSV export. When a step fails on time rather than on a locator, the report says which it was — a page that was slow to arrive, or an element that was never coming — because those need different fixes.

Telling a slow app from a broken one, and why retries hide the difference: Flaky tests.

And then, in your pipeline

Schedule the suite, or trigger it from GitHub Actions, Azure DevOps, GitLab or Jenkins with a single POST and an API key, and either block on the result or poll for it. Tag cases and run a subset — smoke,regression to include, ~slow to exclude. And leave whenever you like: every suite exports to a self-contained C# Playwright project that compiles and runs with dotnet test, with the same healing logic and your recorded fallbacks inside it.

Record your first test in about the time it would take to write one. Free forever, and no card.

Get started free See pricing