Test Runner
Execute Playwright tests or trigger the AI MCP agent against the demo app.
▶How this works
Playwright mode
Jerry spawns a real
npx playwright test process against the repo. stdout/stderr stream back line-by-line via SSE. After the run, the JSON reporter output is parsed to extract pass/fail counts and individual test case results, which are persisted to Supabase.Self-healing selectors
Each test uses a custom Playwright fixture that wraps
page.locator(). If the primary selector (data-testid) fails, it tries 3 fallbacks in order: ARIA role, visible text, then CSS class. When a fallback fires, the healing is recorded to Supabase and surfaces in the Healing tab.// Fallback chain (healing-fixture.ts)
async locate(selector: string) {
for (const strategy of ['testid', 'aria', 'text', 'css']) {
try { return await page.locator(selector) } catch {}
}
}MCP agent mode
In MCP mode, Claude (Haiku) receives your instruction and a set of browser tool definitions. It decides which tools to call, Jerry executes each one against a real Playwright browser, and feeds the actual DOM result back to Claude — creating a genuine observe-act loop rather than a simulation.
Why this matters for QE: self-healing means your test suite survives minor UI refactors without manual selector updates. MCP mode means a non-technical team member can describe a user journey and Jerry will execute and verify it.
run_config
Waiting for test output...█