Platform · QA Automation
Write a test in plain English.
Get real Playwright code.
Testwright is the QA-automation world inside AIRaML — a full workspace, not a single tool. Describe a test in plain English and it writes runnable Playwright TypeScript; then run it on isolated CI with video and a trace, discover new cases from a page, and heal a break across the whole suite. Free and open-source.
You describe
Open the home page.
Click the link to the tools section.
Check the tools heading is visible.
Search "anomaly" and expect a result card.
Testwright writes
import { test, expect } from '@playwright/test';
test('tools search', async ({ page }) => {
// role/name, not a brittle CSS path
await page.goto(BASE_URL);
await page.getByRole('link',
{ name: 'Tools' }).click();
await expect(page.getByRole('heading',
{ name: 'Tools' })).toBeVisible();
await page.getByPlaceholder('Search')
.fill('anomaly');
await expect(page.getByTestId('tool-card'))
.toHaveCount(1);
});A real generation, shown as an example. It writes the draft; run it on isolated CI and, if a locator breaks, self-heal it — all here.
One workspace, four stages
The QA lifecycle, end to end
One world made of stages that hand off to each other — author a test, run it on isolated CI, discover new cases from a page, and heal a break across the whole suite. All four stages are live today.
Author
Plain English, a recorded click-through, or an imported case → a Playwright TS test with resilient locators and real assertions.
Plain-English & recorded authoring
Run
Execute against a live site on an isolated CI runner — pass/fail, a summary, video, trace and a step timeline. When a locator breaks, self-heal it from the page snapshot and re-run.
Cloud execution, artifacts & self-healing
Discover
Give a URL → it renders the page, reads the accessibility snapshot, and proposes candidate test cases → pick some → it drafts each to send to Run.
Automated test discovery
Heal
Run your saved tests as a suite, group the failures by root cause — "1 issue · N tests" — and self-heal each group in one click.
Root-cause failure grouping
How it works
Describe → generate → run → heal
Describe or discover
Type the steps in plain English, paste a written test case, or let Discover render a page and propose test cases for you.
Generate the test
A free LLM (Cohere → Mistral, budget-capped) returns one runnable Playwright TypeScript file — role/text/label locators, real assertions, a comment on each choice.
Run, then heal
Execute on an isolated CI runner for pass/fail with video and a full trace. If a locator breaks, self-healing re-resolves it from the page and re-runs.
Scope
What it does, and what it doesn't
The full authoring-to-healing loop, free and running real browsers on isolated CI. Here is what is in scope and what is out — stated plainly.
In scopeWhat Testwright does
- ✓Plain-English or imported description → Playwright TypeScript
- ✓Resilient role / text / accessible-name locators, with real assertions
- ✓Execute on isolated CI (GitHub Actions): screenshots, video, trace, step timeline
- ✓AI self-healing — re-resolve a broken locator from the page and re-run
- ✓Discover — render a URL, read its structure, and propose test cases
- ✓Saved tests and run history with a pass-rate, all in the browser
Out of scopeWhat it doesn't do
- —Native mobile, desktop or mainframe apps
- —Email deliverability, SMS or phone-call flows
- —Massive parallel browser / OS / device matrices (one free runner at a time)
- —Private or internal (non-public) addresses
- —Instant results — a run queues and spins up a runner, so expect about a minute
The whole loop, in one workspace.
Author, Run, Discover and Heal are all live — plain English to a passing, self-healing test, free and on real browsers.