Playwright-based end-to-end testing workflow.
npx skills add https://github.com/notque/vexjoy-agent --skill e2e-testing
Playwright-based E2E testing across four phases: Scaffold, Build, Run, Validate. Each phase produces a saved artifact and must pass its gate before the next phase begins.
| Signal | Load These Files | Why |
|---|---|---|
| async, Promise.all, race condition, waitForTimeout, fixture teardown | async.md | Routes to the matching deep reference |
| auth, login, storageState, OAuth, SSO, JWT, RBAC, multi-role, session expiry | auth.md | Routes to the matching deep reference |
| config, playwright.config.ts, POM, data-testid, CI/CD workflow | templates.md | Routes to the matching deep reference |
| error, timeout, tsc fail, locator, fill, missing JSON | errors.md | Routes to the matching deep reference |
| POM examples, waiting, multi-browser, shared auth session | playwright-patterns.md | Routes to the matching deep reference |
| Web3, MetaMask, wallet, addInitScript | wallet-testing.md | Routes to the matching deep reference |
| payment, financial, production skip, blockchain | financial-flows.md | Routes to the matching deep reference |
| flaky, intermittent, repeat-each, retries, quarantine | flakiness-triage.md | Routes to the matching deep reference |
Goal: Verify Playwright is installed, create the directory structure, and generate playwright.config.ts.
Actions:
@playwright/test is installed: npx playwright --version. If not, run npm install -D @playwright/test and npx playwright install. tests/
e2e/
auth/
features/
api/
pages/ <- POM classes live here
artifacts/
screenshots/
traces/
videos/
playwright.config.ts using the template in references/templates.md. The config bakes in failure diagnostics by default: screenshot: 'only-on-failure', trace: 'on-first-retry', and video: 'retain-on-failure' so that every failure produces actionable artifacts without manual setup. CI retries (retries: process.env.CI ? 2 : 0) absorb transient infrastructure flakiness without masking real bugs.playwright.config.ts is valid TypeScript: npx tsc --noEmit. Run this deterministic check before any subjective assessment of the config -- compiler errors are facts, opinions are not.Artifact: playwright.config.ts + tests/e2e/ directory structure.
Gate: playwright.config.ts exists AND tests/e2e/ directory exists. If either is missing, do not proceed to Phase 2 -- diagnose and fix.
See references/templates.md for the full playwright.config.ts template and multi-browser matrix rationale.
Goal: Write POM classes for target feature areas, then write spec files that use those POMs.
Every page or feature area gets a typed Page Object class. Spec files never contain inline locators -- all selectors live in the POM. This separation means a selector change is a one-line POM edit, not a grep-and-replace across dozens of specs.
Actions:
pages/ (see POM Pattern in references/templates.md). All locators must use data-testid attributes via page.getByTestId(). CSS selectors (page.locator('.btn-primary')) break silently when styles change. XPath breaks on DOM restructuring. Text matching (page.locator('text=Submit')) breaks on copy changes. data-testid is a testing contract that survives all three.tests/e2e/<area>/ using the POMs.npx tsc --noEmit to verify all files compile.Artifact: tests/e2e/**/*.spec.ts files + pages/*.ts POM classes, all compiling cleanly.
Gate: At least one .spec.ts exists under tests/e2e/ AND npx tsc --noEmit exits 0. If compile fails, fix errors -- do not proceed to Phase 3 with broken TypeScript.
See references/templates.md for the POM Pattern, data-testid convention, and waiting/timing rules.
Goal: Execute the test suite, capture the results JSON, and identify any failing or flaky tests.
Actions:
BASE_URL required).playwright.config.ts: npx playwright test
--repeat-each=5 to distinguish flaky from consistently failing: npx playwright test tests/e2e/auth/login.spec.ts --repeat-each=5
test.fixme(). Never delete a failing test -- deleted tests leave silent coverage gaps. Quarantined tests are visible debt with tracking references: test.fixme('flaky: login redirects intermittently', async ({ page }) => {
// TODO: #123 -- investigate race condition with auth cookie
...
});
test.skip() only for conditional environment guards (e.g., "skip on WebKit"), not for sweeping failures under the rug.Artifact: playwright-results.json (presence is the gate -- pass rate is not).
Gate: playwright-results.json exists at the project root. The file must contain valid JSON. Pass rate does not block Phase 4 -- reporting on failures is Phase 4's job.
See references/templates.md for the full Flaky Test Quarantine Protocol.
Goal: Deterministic checks on test output, then structured report generation.
Actions:
playwright-results.json exists and parses as valid JSON.python3 -c "import json,sys; d=json.load(open('playwright-results.json')); print(d.get('stats', d))"unexpected (failed) and flaky result entries.e2e-report.md using the report template in references/templates.md.Artifact: e2e-report.md.
Gate: e2e-report.md exists. Skill is complete only when this file is written.
See references/templates.md for the e2e-report.md template and the GitHub Actions CI/CD workflow template.
See references/errors.md for the symptom/cause/fix matrix covering tsc failures, CI-only flakes, missing results JSON, locator timeouts, fill-vs-clear bugs, and DOM ordering issues.
| Signal / Task Type | Load This Reference |
|--------------------|---------------------|
| async, Promise.all, race condition, waitForTimeout, fixture teardown | async.md |
| auth, login, storageState, OAuth, SSO, JWT, RBAC, multi-role, session expiry | auth.md |
| config, playwright.config.ts, POM, data-testid, CI/CD workflow | templates.md |
| error, timeout, tsc fail, locator, fill, missing JSON | errors.md |
| POM examples, waiting, multi-browser, shared auth session | playwright-patterns.md |
| Web3, MetaMask, wallet, addInitScript | wallet-testing.md |
| payment, financial, production skip, blockchain | financial-flows.md |
| flaky, intermittent, repeat-each, retries, quarantine | flakiness-triage.md |
Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.
Use when implementation is complete, all tests pass, and you need to decide how to integrate the work - guides completion of development work by presenting structured options for merge, PR, or cleanup
Use when implementing any feature or bugfix, before writing implementation code
Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes
Use when about to claim work is complete, fixed, or passing, before committing or creating PRs - requires running verification commands and confirming output before making any success claims; evidence before assertions always
Expert guidance for systematic backtesting of trading strategies. Use when developing, testing, stress-testing, or validating quantitative trading strategies. Covers "beating ideas to death" methodology, parameter robustness testing, slippage modeling, bias prevention, and interpreting backtest results. Applicable when user asks about backtesting, strategy validation, robustness testing, avoiding overfitting, or systematic trading development.
Cloud laboratory platform for automated protein testing and validation. Use when designing proteins and needing experimental validation including binding assays, expression testing, thermostability measurements, enzyme activity assays, or protein sequence optimization. Also use for submitting experiments via API, tracking experiment status, downloading results, optimizing protein sequences for better expression using computational tools (NetSolP, SoluProt, SolubleMPNN, ESM), or managing protein design workflows with wet-lab validation.
This skill should be used for time series machine learning tasks including classification, regression, clustering, forecasting, anomaly detection, segmentation, and similarity search. Use when working with temporal data, sequential patterns, or time-indexed observations requiring specialized algorithms beyond standard ML approaches. Particularly suited for univariate and multivariate time series analysis with scikit-learn compatible APIs.
Take notque/e2e-testing from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference npm, npx.
Without those the skill loads but fails at the first command.