Trigger
Use when writing Playwright tests, debugging failures, scraping with Playwright, or setting up CI/CD pipelines.
Selector Priority (Always)
- •
getByRole()— accessible, resilient - •
getByTestId()— explicit, stable - •
getByLabel(),getByPlaceholder()— form elements - •
getByText()— visible content (exact match preferred) - •CSS/XPath — last resort, avoid nth-child and generated classes
Core Capabilities
| Task | Reference |
|---|---|
| Test scaffolding & POMs | testing.md |
| Selector strategies | selectors.md |
| Scraping patterns | scraping.md |
| CI/CD integration | ci-cd.md |
| Debugging failures | debugging.md |
Critical Rules
- •Never use
page.waitForTimeout()— usewaitFor*methods orexpectwith polling - •Always close contexts —
browser.close()orcontext.close()to prevent memory leaks - •Prefer
networkidlewith caution — SPAs may never reach idle; use DOM-based waits instead - •Use
test.describe.configure({ mode: 'parallel' })— for independent tests - •Trace on failure only —
trace: 'on-first-retry'in config, not always-on
Quick Fixes
| Symptom | Fix |
|---|---|
| Element not found | Use waitFor() before interaction, check frame context |
| Flaky clicks | Use click({ force: true }) or waitFor({ state: 'visible' }) first |
| Timeout in CI | Increase timeout, add expect.poll(), check viewport size |
| Stale element | Re-query the locator, avoid storing element references |
| Auth lost between tests | Use storageState to persist cookies/localStorage |