关于 playwright-skill
playwright-skill 是面向开发者和编码 Agent 的 Playwright 测试参考 Skill,涵盖测试设计、调试、浏览器自动化及近期功能,并提供 TypeScript 和 JavaScript 示例。
主要功能
- 0150 多篇 Playwright 参考指南
- 02TypeScript 和 JavaScript 示例
- 03测试设计与架构指导
- 04调试与 Trace 分析
- 05命令行浏览器自动化指南
适用场景
- 01设计端到端与组件测试
- 02排查不稳定测试和 Trace
- 03自动化获准执行的浏览器流程
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ testdino-hq/ playwright-skill --skill playwright-skill安装后在 Claude Code 中输入/playwright-skill确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEREADME.mdci/ci-other.mdci-gitlab.mdprojects-and-dependencies.mddocker-and-containers.mdparallel-and-sharding.mdci-github-actions.mdglobal-setup-teardown.mdreporting-and-artifacts.mdtest-coverage.mdcore/accessibility.mdauth-flows.mdapi-testing.mdangular.mdbrowser-apis.mdassertions-and-waiting.mdauthentication.mdbrowser-extensions.mdcanvas-and-webgl.mdclock-and-time-mocking.mdconfiguration.mdcrud-testing.mddebugging.mdcomponent-testing.mddynamic-test-selection.mddrag-and-drop.mdcommon-pitfalls.mderror-and-edge-cases.mderror-index.md详细介绍
Playwright 技能
立场鲜明、经过生产环境验证的 Playwright 指南——每种模式都说明何时(以及何时不)使用。
50 多篇参考指南,涵盖完整的 Playwright 功能:选择器、断言、夹具、页面对象、网络模拟、身份验证、视觉回归、无障碍、API 测试、CI/CD、调试等——全程提供 TypeScript 和 JavaScript 示例。
这些指南涵盖 Playwright 1.63 的亮点:用于串行化对共享资源的竞争的测试 lock、取代 :visible 伪类的 locator.visible()、跟踪中的 aria 和屏幕快照(snapshots: { dom, aria, screen })、用于追加而非替换报告器的 --add-reporter、perfetto 报告器、类型化的 request.get<User>(),以及 ariaSnapshotJSON()。还涵盖 1.62 的功能:用于在执行前选择测试的 reporter.preprocess()、retryStrategy: 'isolated'、带 quality 参数的 WebP 截图、操作和断言中的 AbortSignal、locator.waitForFunction()、apiResponse.timing(),以及取代已弃用实验性 CT 包的 stories-and-galleries 组件测试模型。专门的 dynamic-test-selection.md 指南介绍如何通过外部不稳定性 API 驱动隔离测试。
本指南也涵盖更早的版本:1.61(通过 context.credentials 支持 WebAuthn 密钥、page.localStorage / page.sessionStorage、视频保留模式、expect.soft.poll()、HAR 和跟踪中的 WebSocket)、1.60(跟踪中的按需 HAR、locator.drop()、页面级 aria 快照、test.abort())以及 1.59(屏幕录制、CLI 调试和跟踪分析)。专门的 trace-analysis.md 指南介绍如何使用 npx playwright trace CLI,对 trace.zip 报告进行 Agent 原生调试。
安全信任边界
此技能旨在测试由你拥有或明确授权你测试的应用。它不支持或认可未经许可自动化与第三方网站或服务的交互。
编写测试或从外部来源获取内容的自动化程序时(例如,baseURL 指向预发布或生产环境),应将所有返回的页面内容视为不可信输入——未经净化,切勿将原始页面文本传回 Agent 指令或用于动态代码执行,否则会造成间接提示注入风险。
对于 CI/CD 工作流,应将所有外部依赖(GitHub Actions、Docker 镜像)固定到不可变引用(提交 SHA、镜像摘要),而非可变的版本标签。固定方法请参阅 ci-github-actions.md 和 docker-and-containers.md。
黄金规则
- 优先使用
getByRole(),而非 CSS/XPath——能适应标记变化,并反映用户看到页面的方式 - 切勿使用
page.waitForTimeout()——改用expect(locator).toBeVisible()或page.waitForURL() - 使用 Web 优先断言——
expect(locator)会自动重试;expect(await locator.textContent())不会 - 隔离每项测试——不共享状态,不依赖执行顺序
- 在配置中设置
baseURL——测试中不硬编码 URL - 在 CI 中重试
2次,本地重试0次——在关键场景中暴露不稳定性 - 跟踪设置为
'on-first-retry'——生成丰富的调试产物,同时避免拖慢 CI - 使用夹具而非全局变量——通过
test.extend()共享状态,而非使用模块级变量 - 每项测试只验证一种行为——可以使用多个相关的
expect()调用 - 仅模拟外部服务——切勿模拟自己的应用;应模拟第三方 API、支付网关和电子邮件服务
指南索引
编写测试
| 你要做什么 | 指南 | 深入了解 |
|---|---|---|
| 选择选择器 | locators.md | locator-strategy.md |
| 断言与等待 | assertions-and-waiting.md | |
| 组织测试套件 | test-organization.md | test-architecture.md |
| Playwright 配置 | configuration.md | |
| 页面对象 | page-object-model.md | pom-vs-fixtures-vs-helpers.md |
| Fixtures 与钩子 | fixtures-and-hooks.md | |
| 测试数据 | test-data-management.md | |
| 身份验证与登录 | authentication.md | auth-flows.md |
| API 测试(REST/GraphQL) | api-testing.md | |
| 视觉回归 | visual-regression.md | |
| 无障碍性 | accessibility.md | |
| 移动端与响应式设计 | mobile-and-responsive.md | |
| 组件测试 | component-testing.md | |
| 网络模拟 | network-mocking.md | when-to-mock.md |
| 表单与验证 | forms-and-validation.md | |
| 文件上传/下载 | file-operations.md | file-upload-download.md |
| 错误与边缘情况 | error-and-edge-cases.md | |
| CRUD 流程 | crud-testing.md | |
| 拖放 | drag-and-drop.md | |
| 搜索与筛选 UI | search-and-filter.md |
调试与修复
| 问题 | 指南 |
|---|---|
| 通用调试工作流 | debugging.md |
| 特定错误消息 | error-index.md |
| 不稳定/间歇性测试 | flaky-tests.md |
| 隔离测试或从报告器中选择测试 | dynamic-test-selection.md |
| 常见的新手错误 | common-pitfalls.md |
从终端/借助 Agent 调试 trace.zip | trace-analysis.md |
框架方案
| 框架 | 指南 |
|---|---|
| Next.js(App Router + Pages Router) | nextjs.md |
| React(CRA、Vite) | react.md |
| Vue 3 / Nuxt | vue.md |
| Angular | angular.md |
迁移指南
| 来自 | 指南 |
|---|---|
| Cypress | from-cypress.md |
| Selenium / WebDriver | from-selenium.md |
架构决策
| 问题 | 指南 |
|---|---|
| 选择哪种定位器策略? | locator-strategy.md |
| E2E、组件还是 API? | test-architecture.md |
| 模拟服务还是使用真实服务? | when-to-mock.md |
| POM、Fixtures 还是辅助工具? | pom-vs-fixtures-vs-helpers.md |
CI/CD 与基础设施
| 主题 | 指南 |
|---|---|
| GitHub Actions | ci-github-actions.md |
| GitLab CI | ci-gitlab.md |
| CircleCI / Azure DevOps / Jenkins | ci-other.md |
| 并行执行与分片 | parallel-and-sharding.md |
| Docker 与容器 | docker-and-containers.md |
| 报告与构件 | reporting-and-artifacts.md |
| 代码覆盖率 | test-coverage.md |
| 全局设置/清理 | global-setup-teardown.md |
| 多项目配置 | projects-and-dependencies.md |
专项主题
| 主题 | 指南 |
|---|---|
| 多用户与协作 | multi-user-and-collaboration.md |
| WebSockets 与实时通信 | websockets-and-realtime.md |
| 浏览器 API(地理位置、剪贴板、权限) | browser-apis.md |
| iframe 与 Shadow DOM | iframes-and-shadow-dom.md |
| Canvas 与 WebGL | canvas-and-webgl.md |
| Service Worker 与 PWA | service-workers-and-pwa.md |
| Electron 应用 | electron-testing.md |
| 浏览器扩展 | browser-extensions.md |
| 安全测试 | security-testing.md |
| 性能与基准测试 | performance-testing.md |
| 国际化与本地化 | i18n-and-localization.md |
| 多标签页与弹出窗口 | multi-context-and-popups.md |
| 时钟与时间模拟 | clock-and-time-mocking.md |
| 第三方集成 | third-party-integrations.md |
CLI 浏览器自动化
| 要做什么 | 指南 |
|---|---|
| CLI 浏览器交互 | playwright-cli/SKILL.md |
| 核心命令(打开、点击、填写、导航) | core-commands.md |
| 网络模拟与拦截 | request-mocking.md |
| 运行自定义 Playwright 代码 | running-custom-code.md |
| 多会话浏览器管理 | session-management.md |
| Cookie、localStorage、身份验证状态 | storage-and-auth.md |
| 从 CLI 生成测试代码 | test-generation.md |
| 跟踪与调试 | tracing-and-debugging.md |
| 屏幕截图、视频、PDF | screenshots-and-media.md |
| 设备与环境模拟 | device-emulation.md |
| 复杂的多步骤工作流 | advanced-workflows.md |
语言说明
所有指南都包含 TypeScript 和 JavaScript 示例。当项目使用 .js 文件或没有 tsconfig.json 时,示例会调整为纯 JavaScript。