jank.ai
All test types Pricing Sign up free
Functional · scripted replays 0.35 credits × flow count

Test Flows.

The LLM analyses the page and writes 3–7 realistic user journeys — sign up, search, add-to-cart, checkout, contact form — as structured step lists. The runner replays each one in a fresh Playwright tab, screenshotting every step and recording pass/fail. Failures pinpoint exactly which step broke and why.

What it does generateTestFlows() + runTestFlows()

From the entry screenshot + DOM, the LLM proposes N flows (default 5, configurable 1–10). Each flow is a JSON object:

{
  "title": "Sign up with email and reach the dashboard",
  "goal":  "Verify a new visitor can complete signup end-to-end",
  "steps": [
    { "type": "goto",   "url": "/signup" },
    { "type": "fill",   "selector": "input[name=email]", "value": "test@example.com" },
    { "type": "fill",   "selector": "input[name=password]", "value": "Hunter2-strong" },
    { "type": "click",  "selector": "button[type=submit]" },
    { "type": "verify", "selector": "h1", "text": "Welcome" }
  ]
}

The runner opens each flow in a clean Playwright page, executes every step (click, fill, goto, wait, verify), screenshots after each one, and records the verdict. A flow is "passed" only when every step succeeds. On the first failure, the runner halts that flow and captures the error + the screenshot at the point of failure.

What it finds

Real failures we've seen in production runs:

Coverage

Breadth
User-visible success paths: signup, login, search, checkout, contact form, plan upgrade, share, export
Depth
Per-step screenshots + a verbatim step list — failures pinpoint the exact step + selector that broke
Default count
5 flows per audit, tunable 1–10 via the flows.count option
Output
Pass/fail per flow + per step, with screenshots. Failed flows include the error and the page state.

Sample finding

// One entry from report.testFlows.flows[]
{
  "name":  "Search products and add the first result to cart",
  "passed": false,
  "error":  "step 4 failed: timeout waiting for selector .cart-count",
  "steps": [
    { "type": "click",   "selector": ".search-toggle",           "status": "passed" },
    { "type": "fill",    "selector": "input[type=search]",        "status": "passed", "value": "blue widget" },
    { "type": "click",   "selector": ".result:first-child",       "status": "passed" },
    { "type": "click",   "selector": "button.add-to-cart",        "status": "passed" },
    { "type": "verify",  "selector": ".cart-count",               "status": "failed",
      "detail": "selector never appeared within 10s — cart icon DOM never updated",
      "screenshotUrl": "https://.../flow-3-step-5-failure.jpg" }
  ]
}

See also

Agentic
Exploratory Agent →
When flows pass cleanly, exploratory finds the bugs you didn't think to script — edge cases, monkey input, security.
Your rules
Custom Tests →
Pin specific business-critical flows that should be re-checked on every audit.
Run a free audit → All seven test types