In production · v1

Test your app
the way a person would.
In English.

Describe what should happen. Testorim spins up Chromium, drives it like a real user, captures everything, and writes up what actually happened — video, trace, accessibility scan, console errors, the lot.

30 free runs / monthNo credit card
app.testorim.com
Live
Chat
Sign in with test@example.com / hunter2 and verify the dashboard loads
Got it — 4 steps. Watching now.
your-app.com/login
Sign in
test@example.com
Continue
Steps
  1. navigate /login
  2. type email
  3. type password
  4. click Continue
  5. assert dashboard
2/5 ✓·3.2s
recording video · trace
What it does

Three things Testorim handles
that you currently can't.

01 · Planning

Plain English in. Real browser steps out.

No DSL, no test framework, no selectors. You write what you'd tell a new hire on day one. Testorim's planner picks the right Playwright primitives, finds elements with cascading strategies, and self-heals when the page changes.

  • Action-aware element resolution (button vs input vs link)
  • AI healing if all standard strategies miss
  • Procedures replay deterministically — no LLM in the loop
On the checkout page, fill the form with the test card and verify the success page loads.
Plan · 4 steps
  1. type card number field
  2. type expiry & CVC
  3. click Pay $49
  4. assert "Thanks for your order" visible
02 · Execution

Real Chromium, real network, real timing.

Not a headless DOM simulator. Tests run in the same engine your users see — with a real cookie jar, real CORS, real navigations. Cross-browser to Firefox + Safari for the bugs Chromium hides.

  • WebM video + Playwright trace per run, replayable in trace.playwright.dev
  • Network capture with response headers on failed + first-of-origin requests
  • Console errors + page exceptions tagged to the step that triggered them
Recording · video.webm00:14 · 1280×720
REC
14.2s
trace.zipopen at trace.playwright.dev
navigate · type · click · assert
a11y · 2 violationsaxe-core
  • moderatecolor-contrast3
  • seriouslabel1
03 · Evidence

The report a bug ticket actually needs.

Every run finishes with an AI summary that quotes specific failures, plus the artifacts to back it up. One click and you have a Jira-ready ticket with reproduction steps, expected vs actual, and links to the video and trace.

  • Auto-generated bug tickets — paste straight into Jira / Linear
  • axe-core a11y violations grouped by impact
  • LCP, FCP, TTFB, DCL captured on every final page
Failedcheckout.spec17m ago

Result

Failed — the checkout button rendered but the POST /api/orders silently 500'd. UI showed the success page, but no order row was created.

Suggestion

The /api/orders handler at backend/src/routes/orders.ts:42 is throwing on a missing Stripe customer id. Add a null check and return 4xx instead of 500.

▶ video·↓ trace·network (47)
Ticket
Checkout: success page renders without an actual order row
## Steps to Reproduce
1. Navigate to /checkout
2. Click Pay $49
...
Copy → Jira
The pitch

The same test, two ways to write it.

Both produce a passing run, a video, and a report. One of them you can write while you're half-asleep.

login.spec.ts24 lines
import { test, expect } from "@playwright/test";

test("user can sign in", async ({ page }) => {
  await page.goto("https://your-app.com/login");

  await page
    .getByRole("textbox", { name: /email/i })
    .fill("test@example.com");

  await page.getByRole("button", { name: /^continue$/i }).click();

  await page
    .getByRole("textbox", { name: /password/i })
    .fill(process.env.PASSWORD!);

  await page.getByRole("button", { name: /^continue$/i }).click();

  await expect(page).toHaveURL(/\/dashboard/);
  await expect(
    page.getByRole("heading", { name: /welcome/i })
  ).toBeVisible();
});
Plus: pick element strategy. Handle 2FA. Wait for navigation. Re-run when selectors drift.
testorim · chat1 line

"Sign in with test@example.com and verify the dashboard loads."

We pick the strategy. We handle 2FA. We re-resolve when selectors drift.
How it works

Three things you do. The third is optional.

  1. I

    You describe what should happen.

    The chat input is the input. Anything between a one-line smoke test and a fifteen-step checkout walkthrough — Testorim's planner figures out the steps. No DSL, no selectors, no "wait for..." gymnastics.

    you

    "Go to /login, sign in with test@example.com, verify the dashboard loads."

  2. II

    Testorim drives a real Chromium.

    Steps stream onto your screen as they execute. Screenshots refresh twice a second. If something fails, the agent stops cleanly — no zombie cursor flailing through three more steps after the page already broke.

  3. III

    Save it as a procedure (or don't).

    Loved the run? One click and it becomes a saved procedure that replays without invoking the LLM — paid plans pay cents per re-run. Hated it? Walk away. Nothing was saved.

Pricing

Free to try. Honest when you grow.

30 runs a month at $0 is enough to know if this fits. Then a flat monthly tier, plus one-time credit packs for a busy week. Every plan is cancel-anytime.

Free

Try it on personal projects.

$0/mo
  • 30 test runs / month
  • 60 browser minutes / month
  • Chromium only
  • API response assertions
  • Personal workspace only
  • 7 days of history
Start free
Most popular

Pro

For solo builders shipping fast.

$49/mo
  • 500 test runs / month
  • 600 browser minutes / month
  • Mobile viewport testing
  • Flaky detection (Run 3×)
  • Login state reuse
  • Video + Playwright trace
  • Accessibility scan
  • 2 team workspaces · 3 seats
  • 90 days of history
Start Pro

Team

For teams that ship together.

$199/mo
  • 2,500 test runs / month
  • 3,000 browser minutes / month
  • Everything in Pro
  • Cross-browser (Firefox + Safari)
  • DB state verification
  • 4 team workspaces · 10 seats
  • 365 days of history
Start Team

Stop writing Playwright specs. Describe the test instead.

Sign up, paste a URL, describe a flow. First report in under two minutes. No credit card.

Start free