playwright-pro
Browser automation with Playwright — reliable selectors, waits, and test patterns — use for E2E testing and scripted browsing.
- License 许可
- MIT
- 最近更新
- 2026-11-07
- Stars
- ★ 0
- Forks
- 1
01 前言 Front Matter
- name
- playwright-pro
- category
- web-data
- description
- Browser automation with Playwright — reliable selectors, waits, and test patterns — use for E2E testing and scripted browsing.
03 SKILL.md 正文
Overview
Playwright automates Chromium, Firefox, and WebKit with a modern async API, built-in waiting, and first-class test runner integration. Its killer feature is auto-waiting: actions wait for elements to be actionable, which eliminates most flakiness that plagues browser automation. This skill covers writing Playwright automation that's fast and reliable.
When to use
- Writing end-to-end tests for web applications
- Automating browser workflows (form filling, data extraction from JS sites)
- Testing across Chromium, Firefox, and WebKit
- Debugging flaky browser tests
- Generating PDFs/screenshots or mocking network responses
Core concepts
Auto-waiting beats sleep. Playwright actions (click, fill, select)
automatically wait for the element to be attached, visible, stable, and
receiving events. Never use fixed sleep() — use explicit waits
(waitForSelector, expect(...).toBeVisible()) tied to actual conditions.
Flaky tests are almost always missing waits in disguise.
Locators over selectors. Prefer user-facing locators —
getByRole('button', { name: 'Submit' }), getByLabel, getByText — over
CSS/XPath. They mirror how users find elements, survive most refactors, and
enforce accessibility (if you can't find it by role, screen readers can't
either). Reserve CSS for layout-specific cases.
Isolated contexts. Each test gets a fresh browser context (cookies, storage, sessions isolated) — fast and parallelizable, unlike fresh browser instances. Share authenticated state via storage-state files: log in once, save state, reuse across tests — cutting minutes off suites.
Network control. Route interception mocks APIs (page.route → fulfill
with fixtures) for deterministic tests independent of backends; request
inspection asserts what the app actually sent. Use mocking for speed and
stability, but keep a subset of tests hitting real backends to catch
integration drift.
Trace viewer for debugging. On failure, capture traces (screenshots, DOM snapshots, network, console per action) — the trace viewer replays exactly what happened. Configure tracing to retain-on-failure; debugging from a trace beats re-running and hoping.
Practical workflow
- Structure tests by user journey (not by page object ceremony): arrange → act → assert, with test data seeded via API (faster than UI setup) where possible.
- Write with locators: roles, labels, and text first; add
data- testidattributes for elements with no good user-facing handle. - Handle the async reality: await every action, assert with
auto-retrying
expect(not manual polling), and wait for network idle or specific responses after actions that trigger requests. - Isolate and parallelize: fresh context per test, storage-state for auth, workers for parallelism — keep suites under minutes, not hours.
- Debug with traces: reproduce locally with
--headed --debug, inspect the trace timeline for the exact failing action and app state. - Keep the suite healthy: quarantine genuinely flaky tests with an owner and deadline (never normalize red), and delete tests that assert nothing meaningful.
Common pitfalls
- Fixed sleeps —
waitForTimeout(3000)is slow when unnecessary and flaky when insufficient; wait on conditions instead. - Testing implementation details — asserting on CSS classes or internal state instead of user-visible outcomes; refactors break the suite.
- Shared state between tests — order-dependent tests that pass alone and fail together; isolate via fresh contexts.
- Over-mocking — a suite that mocks everything tests the mocks; balance with real-integration coverage.
- Ignoring the other browsers — Chromium-only testing misses Firefox/WebKit quirks; run the matrix in CI at least for critical paths.
- Screenshots as assertions — pixel comparisons are brittle across environments; assert structure and key visuals, not exact pixels (except dedicated visual-regression setups with controlled baselines).
04 同仓库更多 Skills
web-scrape
Turn web pages into LLM-ready markdown via the Firecrawl API (renders JS, anti-bot handling). Use when browser_open/fetch fails on JS-heavy pages, or when you need clean markdown/structured extraction from a site. Requires FIRECRAWL_API_KEY.
design-taste-frontend
tasteskill v2, the anti-slop frontend skill. Art direction for websites, distilled from a study of 247 curated gallery sites (One Page Love, Awwwards Sites of the Day). Deals researched directions (idea, composition, type, palette, photographs, section blueprints) from a library, enforces a strict no-slop house style with a real-browser inspector, and runs a look-and-fix loop on screenshots. Use this whenever you build, design, redesign, restyle, polish or review a landing page, marketing site, portfolio, product page, one-pager, hero or any public-facing web page, in any stack (HTML/CSS, React, Next.js, Vue, Svelte, Astro, Tailwind) — also when the user says a page looks generic, templated, "AI-made", sloppy, or asks to make it look designed, premium, award-level or less like every other site. Not for dashboards or app screens.
test-driven-development
Use when implementing any feature or bugfix, before writing implementation code
systematic-debugging
Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes
requesting-code-review
Use when completing tasks, implementing major features, or before merging to verify work meets requirements
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).