Setup playwright
Skill n-n-code/n-n-code-skills/.agents/skills/setup-playwright
Just Another Agent skill repository.
npx -y skills add n-n-code/n-n-code-skills --skill setup-playwrightAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Use when adding, extending, or repairing a repo-owned Playwright E2E harness across Node `@playwright/test`, Playwright Pytest, or .NET/Java test frameworks — including browser installation, harness config, auth reuse plumbing, package placement, or CI smoke/sharding setup. Not for ordinary spec debugging once the harness already works; route that to `playwright-testing`.
SKILL.md
17.4 KB, as published. Nobody here has run it
Setup Playwright
Build the smallest reliable Playwright harness that fits the repository already in front of you.
This is a system skill: it leaves behind repo-owned test setup, config, and a
starter check. Day-to-day spec authoring belongs to playwright-testing.
Preserve the repo's existing Playwright ecosystem shape instead of forcing
Node @playwright/test into Python, .NET, or Java repos that already have a
clear runner choice.
Runner Choice
Use the repo's strongest local signal:
- Node / TypeScript / JavaScript repo with no stronger signal:
@playwright/test - Python repo with pytest usage: Playwright Pytest
- .NET repo: existing MSTest, NUnit, or xUnit project plus Playwright's .NET install flow
- Java repo: existing JUnit or TestNG module plus Maven or Gradle Playwright wiring
When To Use
- no working Playwright harness exists in the target package or test project
- an existing config is broken, incomplete, or moved packages
- adding reusable auth or storage-state wiring for login reuse — even if specs already exist (config-shape changes belong here)
- adding
webServer, browser install, browser projects,storageState, sharding, or CI reporter setup - placing Playwright correctly in a monorepo or alongside existing unit tests
Not For
- writing, reviewing, or hardening specs once the harness works — route to
playwright-testing - debugging flaky specs, brittle locators, or test behavior — route to
playwright-testing - product exploration with
playwright-cli, UI Mode, orcodegen— route toplaywright-testing
Routing Flowchart
digraph route {
"Working Playwright harness exists?" [shape=diamond];
"Main artifact is config,\nbrowser install, or auth plumbing?" [shape=diamond];
"setup-playwright" [shape=box];
"playwright-testing" [shape=box];
"Working Playwright harness exists?" -> "setup-playwright" [label="no"];
"Working Playwright harness exists?" -> "Main artifact is config,\nbrowser install, or auth plumbing?" [label="yes"];
"Main artifact is config,\nbrowser install, or auth plumbing?" -> "setup-playwright" [label="yes"];
"Main artifact is config,\nbrowser install, or auth plumbing?" -> "playwright-testing" [label="no"];
}
Adjacent Skills
- project-config-and-tests — when the work changes config shape, defaults, test layout, or deterministic coverage expectations.
- coding-guidance-python, coding-guidance-cpp, coding-guidance-bash, or another principle skill when setup needs non-trivial code in that language.
- ui-guidance or ui-design-guidance — when the starter smoke test must validate UI behavior, accessibility, responsiveness, or visible layout.
- playwright-testing — once the harness exists and the job becomes test design, visual QA, or flake review.
Reference Map
- references/ecosystem-patterns.md — choose the correct Playwright harness shape for Node, Python, .NET, or Java; preserve the repo's runner and install commands.
- references/auth-and-ci-patterns.md —
Node Playwright Test patterns for
auth.setup.ts+ setup-project wiring, API login, one account per worker, CI posture, sharded reports. - references/browser-and-config-patterns.md
— Node Playwright Test defaults for config scope, projects/dependencies,
browser and channel selection, emulation, timeouts, reporters,
webServer.
Reference naming note:
auth-and-ci-patterns.mdandbrowser-and-config-patterns.mdkeep their historical names, but they are intentionally Node Playwright Test-only.- Keep truly cross-ecosystem guidance in
references/ecosystem-patterns.mdrather than widening the Node helpers until they become ambiguous.
Core Workflow
- Inspect the repo first. Read
package.json,pyproject.toml,.csproj,pom.xml,build.gradle, lockfiles, workspace config, existing test folders, Playwright config, CI files, ignore files, app docs, route files, and any auth or test-id signals. Identify the package manager, app root, likely test language, start command, base URL, auth flow, configuredtestIdAttribute, browser or device expectations, and whether this is a monorepo or a migration from another E2E tool. - Resolve the five setup inputs from repo truth. Ask the user only for
what the repo does not already answer:
- Target URL: local base URL for
webServer, or the external URL the harness will hit. - Auth model: none, fixture-based login, or runner-native reusable
auth plus ignored
storageState. - Test data: ephemeral per-test, shared seed, backend reset hook, or deliberately mocked external boundary.
- Browser scope: Chromium-only to start, or a broader matrix.
- CI posture: local only, smoke on pull requests, or broader regression cadence.
- Target URL: local base URL for
- Choose the package boundary and setup path. If Playwright already
exists, extend or repair instead of re-scaffolding. In monorepos,
preserve the correct package boundary; ask before adding dependencies
when multiple packages are equally plausible. Preserve the repo's
existing language and runner. Use the repo's native Playwright stack:
@playwright/testfor Node, Playwright Pytest for Python, Playwright's base classes andplaywright.ps1flow for .NET, and the repo's chosen Java test framework with Playwright dependencies and CLI wiring for Java. If no stronger signal exists, default to Node Playwright Test for repo-owned E2E. Do not switch to the rawplaywrightlibrary unless the user explicitly wants library automation outside the test runner. - Place files conservatively. Follow existing test layout. Otherwise
use the ecosystem's normal layout: Node commonly uses
tests/,e2e/, ortests/e2e/; Python follows the repo'stests/and pytest config shape; .NET and Java should stay inside the existing test project or module instead of inventing a parallel Node-style tree. - Configure the runner in the repo's ecosystem. For Node, add the
smallest durable
playwright.config.*that fits:testDir,use.baseURL, CI-safeforbidOnly,retries: process.env.CI ? 2 : 0,workers: process.env.CI ? 1 : undefined, reporter defaults that fit agent and CI use,trace: 'on-first-retry',screenshot: 'only-on-failure', andwebServerwhen the app has a stable start command. Preserve or definetestIdAttributewhen the repo uses an explicit test-id contract. For Python, preserve pytest config and CLI defaults instead of fabricatingplaywright.config.ts. For .NET, preserve the existing test framework and use runsettings or launch options rather than Node config files. For Java, preserve the repo's test framework and build-tool wiring rather than introducing a Node-style runner. EnablefullyParallelonly when the suite is truly isolation-safe. When many tests need the same authenticated user, use ignoredstorageStateor the closest ecosystem-native equivalent. - Add supporting structure only when repetition justifies it. Create
fixtures, page objects, or setup helpers when flows or setup repeat.
Prefer fixtures over broad
beforeEach. Use route mocking only for external or intentionally injected boundaries, and block service workers when they would swallowpage.route(). In Node Playwright Test, use projects for meaningful browser, device, environment, or setup-dependency differences andtest.use()for narrower per-file or per-describeoverrides such as locale, timezone, permissions, color scheme, or viewport. In other ecosystems, use the runner's equivalent local override mechanism instead of inventing Node abstractions. - Preserve repo conventions and CI posture. Add scripts only in the style the repo already uses. Keep Playwright as a separate E2E entrypoint unless the repo already treats it as default. Default CI posture is a smoke gate on pull requests; a broader matrix only when the repo or user needs that evidence.
- Add one starter smoke test. Cover a stable, low-cost product path: app loads, a landmark or heading is visible, and one core navigation or interaction works. Use web-first assertions and user-facing locators.
- Validate narrowly. Run the preflight below, install required
browsers when needed, then run the smallest meaningful runner command
for the changed setup. Start with one file, one module, or one browser
target and the narrowest useful output for that ecosystem.
--listproves discovery only; run at least one real test when the environment allows it. - Report the contract. State the workspace root or package boundary, package manager, config path, test directory, scripts added, validation command, and any setup assumptions the next agent or developer must know.
Validation Preflight
Before the first Playwright-backed test invocation:
- Bind host and port: confirm
127.0.0.1(unless the environment requires another bind) and verify the port is free. Do not letwebServerrace a manually started dev server on the same port. - Sandbox escalation: if a bind fails with
EPERMorEACCES, escalate rather than retry-loop. - Build-lock hygiene: clear stale build locks such as
.next/lockonly after confirming no active owner remains. - Artifact paths: confirm the ecosystem's artifact directories
(for example
test-results/orplaywright-report/in Node setups) and any auth-state path are writable and ignored when appropriate. - Browser install path: confirm the needed browser binaries are available, then install only what the repo's scope actually requires. Re-run browser install after Playwright version upgrades.
Decision Rules
Boundary and scope
- Do not overwrite existing Playwright config, tests, snapshots, or scripts.
- Keep E2E thin. Set up the harness to protect critical journeys, not to replace lower-level testing.
- Ask before choosing a package boundary when a monorepo has multiple plausible app packages and no clear target.
- These skills target Playwright-backed E2E harnesses. Component Testing, Chrome extension testing, and WebView2 automation need specialized setup; do not silently fold them into the default web-app harness.
- Do not scaffold Playwright Test Agents with
npx playwright init-agentsunless the user explicitly wants repo-owned planner/generator/healer definitions. - Do not fabricate
playwright.config.ts,auth.setup.ts, or Node package scripts inside Python, .NET, or Java repos just to imitate the Node docs.
Package manager and ecosystem
- Prefer the repo's existing package manager and lockfile. Do not introduce a second package manager.
- Treat Node Playwright Test, Playwright Pytest, Playwright .NET base
classes, and Java test-framework integrations as first-class. Use Node
@playwright/testonly when the repo is already Node-based or no stronger stack signal exists.
Install hygiene
- Keep Playwright and its browser binaries in sync. After updating the package, rerun the Playwright install command for the browsers you actually need.
- Do not add
@playwright/clias a repo dependency just to investigate the app. Keepplaywright-clias agent tooling unless the user explicitly asks for reusable repo-owned browser automation.
Config shape
- In Node Playwright Test, prefer
webServerin config over telling users to start the app manually, unless the repo's start process is intentionally external. - In Node Playwright Test, prefer project dependencies over
globalSetup/globalTeardown. Use global hooks only for genuinely non-fixture bootstrap or environment-variable handoff outside the normal runner model. - In Node Playwright Test, use
test.use()ortest.describe(() => test.use(...))for narrow locale, timezone, permissions, color-scheme, or viewport overrides instead of adding another whole project. - Enable
fullyParallelonly when tests are genuinely order-independent; it amplifies shared-state bugs. - Configure Chromium-only validation first when speed or dependency cost is the constraint. Default to bundled Chromium; opt into branded Chrome or Edge channels only when stable-channel parity, codec behavior, or a browser-policy environment actually requires it.
- If the suite is TypeScript, remember Playwright transpiles TS but does
not type-check it. Preserve or add a separate
tsc --noEmitstep when the repo expects type safety.
Auth plumbing
- In Node Playwright Test, use a setup project plus ignored
storageStatewhen reusable login is needed. In other ecosystems, keep the same intent but wire it through the runner's fixtures, helpers, or base classes. - If the app stores required auth state in
sessionStorage, inject it withaddInitScriptor the closest ecosystem-native equivalent. - UI Mode does not run setup projects by default in Node Playwright Test. Document how auth state is refreshed manually when it expires.
Artifacts and hygiene
- Keep authentication state, traces, videos, screenshots, and generated reports out of git unless the repo has a deliberate artifact policy.
- Do not add visual-regression baselines by default. Add them only when rendering is itself a maintained contract.
- Do not add fixed sleeps, broad CSS selectors, or assertion-free starter tests. The starter must use web-first assertions.
- Do not invent CI, deployment, or release claims. Add CI workflow changes only when the task explicitly includes CI or the repo already has a clear CI pattern to extend.
Rationalization Table
Common setup shortcuts and expected pushback live in references/pressure-tests.md. Load that reference when reviewing a proposed harness shortcut or revising the skill's trigger and setup rules.
Setup Checklist
- package manager, workspace root, and target package boundary are identified
- the five setup inputs (URL, auth, data, browsers, CI) are resolved
- Playwright dependency and browser install path fit the repo
- runner config has an explicit test location, base URL or startup contract, retry policy, and artifact or reporting shape
- CI worker count and trace policy are explicit
fullyParallel, if enabled, is justified by actual test isolation- selector or test-id contract is explicit when the repo uses one
- auth, if any, uses a runner-native reusable pattern
- broad-vs-local override scope is chosen deliberately for the active runner
- if CI sharding is in scope, reporter and merge strategy are explicit
- if the runner transpiles but does not type-check TypeScript, separate typecheck behavior is explicit
- commands, scripts, or build-tool wiring match existing naming conventions
- first test uses role, label, text, alt text, or test id locators
- generated artifacts and auth state are ignored or already covered
- validation ran, or the blocker is stated with the next exact command
Examples
Set up Playwright tests in this fresh Next.js repo.→ inspect package scripts, add Playwright Test with the repo's package manager, configurewebServeron127.0.0.1:<port>, create a starter smoke test, run it in Chromium with--reporter=line.Set up Playwright browser tests in this Python repo.→ preserve pytest, add Playwright Pytest and browser install commands, keep config in pytest files or fixtures instead of inventingplaywright.config.ts, validate with a narrowpytestrun.Add an E2E harness to this app without disturbing unit tests.→ keep the existing unit-test layout intact, add Playwright at the repo's native test boundary, keep its commands separate from unit-test entry points, and validate only the new harness.Add Playwright coverage to this .NET test project.→ preserve MSTest, NUnit, or xUnit, wire browser installation throughplaywright.ps1, keep storage-state paths and runsettings in the test project, validate withdotnet test.Add Playwright coverage to this Java Maven module.→ preserve JUnit or TestNG, wire browser installation and Playwright dependencies through Maven or Gradle instead of Node scripts, keep auth setup in Java helpers, and validate with the module's existing test command.Fix this broken playwright.config.ts after a package move.→ repair paths, base URL, scripts, and project config without re-scaffolding or replacing existing specs.Add login reuse so tests do not log in through the UI every time.→ add the runner's reusable auth mechanism with ignoredstorageState, document how the state is refreshed, and keep the login UI only in the tests where login itself is the claim. In Node this commonly means asetupproject; in other ecosystems use fixtures, helpers, or base classes. Handled here because it changes harness shape even when specs already exist.
Maintainer Notes
For doc refreshes, trigger audits, and pressure-test scenarios, see references/coverage-and-validation.md.