01The pipeline behind generated tests
Every credible AI test generator follows the same five-stage shape. The differences between tools are almost entirely in stages two and three.
- Crawl & map. Discover routes and states — links, forms, client-side navigation, authenticated areas.
- Flow extraction. Group interactions into named user flows (signup, checkout, invite).
- Grounding & locators. Choose selectors that survive redesigns.
- Assertion synthesis. Decide what should be true after each step.
- Deterministic export. Emit runnable code, byte-stable for identical input.
Molar’s Cartographer follows exactly this shape: an exploration agent maps your app from a seed URL, then an export pipeline produces Playwright specs you can read, diff, and run anywhere.
02Locator quality is the whole ballgame
A generated test is only as durable as its worst selector. Naive recorders emit CSS paths like
div:nth-child(3) > span that shatter on the next design change. A good generator ranks
candidate locators instead of taking the first match:
# Ranking, simplified
1. data-testid (stable, purpose-built)
2. accessible name (role + name — survives styling changes)
3. label text association (forms)
4. text content (unique, human-meaningful)
5. structural CSS (last resort)
The result reads like a careful engineer wrote it — and when the UI does shift, a self-healing layer can re-rank and propose a patch instead of failing the build.
03Assertions: where AI earns or loses trust
Navigation without verification is theater. Each step should carry an oracle: the heading that must appear, the row count that must change, the confirmation code that must arrive. LLMs help most here — reading visible state and proposing semantic assertions (“order total shows $42.00”, “banner says ‘Invite sent’”) rather than pixel snapshots that flake.
04Deterministic output, or it doesn’t belong in CI
Generation should be repeatable: same app state in, same spec out. Byte-stable export means code review
diffs show real changes, not LLM paraphrase noise. Molar compiles scenarios deterministically — the same
.molar.md source always produces the same Playwright file — so generated tests behave like
hand-written ones in git: reviewable, versioned, yours.
$ molar generate --url https://staging.example.com
✓ Mapped 14 routes, 6 flows
✓ Authored checkout.spec.ts, signup.spec.ts, invite.spec.ts
✓ Assertions: 23 semantic, 0 visual-only
→ Exported to ./e2e (playwright@1.49 compatible)
05The third-party problem nobody demos
Generated checkout tests die the moment they hit a live payment processor. Serious generation pairs with safe third-party substitutes: stateful clones that speak Stripe’s API but never move money. That’s the difference between a demo that works on a toy site and tests that run hourly against production.
Generate your first suite in minutes
Point Molar at any URL. It maps the flows, authors Playwright-grade tests, and guards them in production — no cards charged, no emails sent.
06Evaluation checklist before you adopt
- Readable output? You should want to commit what it generates.
- Locator strategy? testid/accessibility-first, not nth-child soup.
- Real assertions? Semantic oracles per step, not screenshots-only.
- Self-healing? Proposes fixes, never silently rewrites intent.
- Safe side effects? Clones for payments/email/SMS — see Stripe testing without real cards.
- CI-native? Required status checks, flake quarantine, traces on failure — GitHub Actions setup.
Tools that clear this bar replace hours of maintenance work. Everything else is a recorder with an API key.