Tools
playwright-cli — verify selectors against the live DOM
A persistent browser session you drive from the CLI, using your existing storage state. Best used to clean up a draft after you've built the Page Object from the source code (see Writing tests step 4): open the running app and confirm the drafted selectors resolve, then fix what the source didn't reveal — dynamically rendered content, conditional states, elements that only appear after an interaction. Dump a DOM snapshot, check what get_by_role resolves to, confirm a data-testid exists, inspect modal/dropdown contents.
It snapshots to disk instead of dumping HTML into context, and reuses the same storage_state JSON the test framework already produces — far better than throwaway sync_playwright scripts.
Prefer reading the source to discover hooks (testids are in the code); use
playwright-clito verify, not to discover from scratch.
playwright-mcp — targeted live investigation only
Browser tools exposed to an AI agent (config in .cursor/mcp.json). Token-intensive — each snapshot/click/evaluate consumes significant context.
- ✅ Good for: debugging a flaky step by inspecting live DOM state; reverse-engineering component internals (e.g. walking React fiber trees to reach the Linkchart G6 graph instance for node counting).
- ❌ Not for: writing whole tests from scratch (too many interactions, burns context), or routine runs (just use
uv run pytest --headed). See repo README §5.
Trace viewer
playwright show-trace <trace.zip> locally, or https://plrview.int.octostar.com (Tailscale). Step through exactly what the browser did on a failure. See Fixing tests.
Allure
Local: make allure-serve. CI dashboard: https://allure.int.octostar.com (Tailscale). See Reading results: Allure & CI.