AGENT SKILL

playwright-pro

Browser automation with Playwright — reliable selectors, waits, and test patterns — use for E2E testing and scripted browsing.

License 许可
MIT
所属仓库
TanNhatCMS/jarvis
最近更新
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

  1. 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.
  2. Write with locators: roles, labels, and text first; add data- testid attributes for elements with no good user-facing handle.
  3. 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.
  4. Isolate and parallelize: fresh context per test, storage-state for auth, workers for parallelism — keep suites under minutes, not hours.
  5. Debug with traces: reproduce locally with --headed --debug, inspect the trace timeline for the exact failing action and app state.
  6. 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

TanNhatCMS
TanNhatCMS/jarvis

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.

★ 0
TanNhatCMS
TanNhatCMS/jarvis

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.

★ 0
TanNhatCMS
TanNhatCMS/jarvis

test-driven-development

Use when implementing any feature or bugfix, before writing implementation code

★ 0
TanNhatCMS
TanNhatCMS/jarvis

systematic-debugging

Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes

★ 0
TanNhatCMS
TanNhatCMS/jarvis

requesting-code-review

Use when completing tasks, implementing major features, or before merging to verify work meets requirements

★ 0
TanNhatCMS
TanNhatCMS/jarvis

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).

★ 0