用途
本技能用于为生产级 Web 应用编写端到端(E2E)浏览器测试,技术栈为 Playwright 与 TypeScript。当任务需要可复用的判断、领域约束或经过验证的工作流,而非临时性建议时使用。若任务与 E2E 测试无关,或更适合由更具体的配套技能处理,或仅需简单回答,则不应使用本技能。
主要能力
- 测试定位与策略:E2E 测试位于 Cohn 金字塔顶端(70% 单元、20% 集成、10% E2E),用于捕获单元测试无法发现的失败,如第三方脚本回归、CSS 布局破坏、认证 Cookie、真实网络时序和浏览器差异。质量目标:7 天内通过率 ≥ 99%,CI 墙钟时间 ≤ 5 分钟(含分片),flake 率 ≤ 1%(24 小时内隔离)。
- Playwright 配置:通过
npm init playwright@latest初始化,支持 TypeScript、tests/ 目录和 GitHub Actions。配置涵盖并行、重试、worker 数、报告器、baseURL、trace、截图、视频以及多浏览器项目(chromium、firefox、webkit、mobile-chrome)。 - Page Object Model:每个页面一个类,类持有定位器并暴露意图级方法,测试不直接接触选择器,便于 DOM 变化时维护。
- 定位器策略:优先使用贴近真实用户查找方式的定位器,优先级为 getByRole、getByLabel、getByPlaceholder、getByText、getByTestId。
- 测试夹具(Fixtures):通过扩展 test 注入可复用设置,如已认证页面、种子记录或插桩 API 客户端。
- 认证处理:不在每个测试中重复登录 UI,而是在 setup 项目中登录一次,保存 storageState 并在整个运行中复用,可减少 30-60% 套件时间。
- 网络拦截:使用 page.route() 在浏览器层重写请求,可模拟第三方 API、注入错误状态、模拟慢网络;完整限流可通过 CDP 实现。
- 表单提交测试:每个表单覆盖三种状态:有效提交、字段级验证、服务端错误。
- 视觉回归测试:像素快照捕获功能断言遗漏的布局破坏,按平台维护基线,使用 maxDiffPixelRatio 和 mask 处理动态区域。
- 无障碍测试:使用 @axe-core/playwright 在 WCAG 2.2 AA 违规时使构建失败。
- 移动视口测试:关注 375px、768px、1280px 三种视口,使用设备描述符设置视口、用户代理和触摸支持。
- API + UI 组合测试:使用 request fixture 直接调用 API,在 UI 断言前播种数据并在之后清理。
- 并行执行:默认按文件并行,fullyParallel: true 可按测试并行;CI 使用 workers: 4,支持分片(--shard)。
- CI 集成:提供 GitHub Actions 工作流示例,包括依赖安装、npm 与浏览器缓存、分片矩阵运行、失败时上传 HTML 报告。
- 调试工具:Trace Viewer、--debug、page.pause()、截图,按使用频率排序。
- 报告:默认 HTML 报告器,可添加 JUnit XML 供 CI 插件使用。
使用方式
- 先阅读 SKILL.md,然后仅加载任务所需的深层参考文件。
- 应用技能中的有序指导、检查清单和决策规则,而非挑选孤立片段。
- 产出交付物时,在重要处明确假设、风险和后续工作。
- 收集相关项目上下文、约束和具体问题;确认期望交付物:设计、代码、审查、迁移计划、审计或文档。
适用场景
- 为生产 Web 应用编写 E2E 浏览器测试。
- 需要 Playwright + TypeScript、Page Object Model、网络拦截、视觉回归、无障碍断言、CI 集成、并行执行或 flake 分诊的任务。
- 需要可复用判断、领域约束或成熟工作流,而非临时建议的工程任务。
限制
- 不适用于与 E2E 测试无关的任务,或更适合由更具体配套技能处理的任务。
- 不适用于仅需简单回答、且本技能约束或参考无实质帮助的请求。
- 不要用 E2E 验证纯逻辑,那属于单元测试。
- 共享状态(数据库行、上传文件)需要串行模式、按 worker 隔离或每个分片使用全新种子数据库。
- 视觉回归基线按平台维护,渲染在 macOS、Linux、Windows 间存在差异。
- 认证状态文件包含实时会话令牌,切勿提交,需加入 .gitignore。
- 反模式:将示例当作可复制粘贴的真理而不检查适配性、约束或失败模式;默认加载所有参考文件而非渐进式披露。
输出
符合任务的具体结果:实现指导、审查发现、架构决策、模板或生成的工件。当无法仅凭可用上下文完成任务时,明确假设、权衡或未解决的缺口。在能实质改善执行时,列出使用的参考、配套技能或后续行动。