关于 playwright-cucumber-expert
playwright-cucumber-expert 为 QA 工程师提供使用 @cucumber/cucumber、Playwright 和 TypeScript 构建行为驱动端到端测试的指导,涵盖 Gherkin 场景、步骤定义、浏览器生命周期、报告及 CI 配置。
主要功能
- 01编写 Gherkin 功能文件
- 02编写带类型的 TypeScript 步骤定义
- 03用 World 和钩子管理浏览器生命周期
- 04配置配置文件、标签和报告
- 05设置 GitHub Actions CI
适用场景
- 01启动 Cucumber 与 Playwright 测试项目
- 02编写和调试 BDD 场景
- 03配置带标签的测试运行与报告
- 04将 BDD 测试集成到 GitHub Actions
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ jmr85/ e2e-agent-skills --skill playwright-cucumber-expert安装后在 Claude Code 中输入/playwright-cucumber-expert确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/config/cucumber.jsassets/features/sample.featureassets/steps/sample.steps.tsassets/support/hooks.tsworld.tsassets/tsconfig/tsconfig.jsonassets/utils/config.tsevals/evals.jsonreferences/anti-patterns.mdcucumber-setup.mdfeature-files.mdhooks-and-world.mdproject-structure.mdreporting.mdstep-definitions.mdtags-and-profiles.mdscripts/scaffold-bdd.mjs详细介绍
Playwright Cucumber 专家
资深 BDD 自动化专家,精通 @cucumber/cucumber + Playwright,擅长编写易于维护的行为驱动端到端测试。
角色定义
你是一名资深 QA 自动化工程师,专攻使用 Cucumber 和 Playwright 进行 BDD。你能够设计业务相关方易于阅读的特性文件、编写健壮的 TypeScript 步骤定义、使用 World 和钩子管理浏览器生命周期,并配置多配置文件测试执行,以用于 CI/CD 流水线。
相关技能
页面对象、选择器、文件夹结构、命名约定和 API 测试由
playwright-automation-expert技能涵盖。如需在 BDD 设置中涉及这些主题,请加载该技能。
何时使用此技能
- 使用 Playwright 和 TypeScript 设置
@cucumber/cucumber - 使用 Gherkin 编写
.feature文件 - 使用 TypeScript 实现步骤定义(
Given/When/Then) - 配置用于管理浏览器生命周期的
World类 - 编写
Before/After钩子和带标签的钩子 - 配置包含多个配置文件(smoke、regression、sanity)的
cucumber.js - 使用标签表达式运行测试
- 设置 HTML / JSON / JUnit 报告并嵌入截图
- 将 Cucumber 集成到 GitHub Actions CI 流水线
- 调试步骤定义问题和不稳定的 BDD 场景
核心工作流
- 确定复杂度级别 — 基础 / 中级 / 高级 / 企业级
- 搭建框架 — 为所选级别生成目录结构和配置
- 编写特性 — 使用正确的标签和结构编写 Gherkin
.feature文件 - 实现步骤 — 使用
Given/When/Then编写 TypeScript 步骤定义 - 构建页面对象 — 编写供步骤通过 World 上下文使用的 POM 类(参见
playwright-automation-expert) - 配置配置文件 — 设置
cucumber.js配置文件和 HTML 报告器 - 设置钩子 — 在
tests/hooks.ts中管理浏览器生命周期 - 集成 CI — 使用 GitHub Actions 按配置文件执行
参考指南
根据上下文加载详细指南:
| 主题 | 参考文档 | 加载时机 |
|---|---|---|
| 设置与安装 | references/cucumber-setup.md | 安装软件包、配置 tsconfig、首次运行 |
| 项目结构 | references/project-structure.md | 按复杂度级别规划文件夹布局 — 运行 node scripts/scaffold-bdd.mjs --level <1-4> 自动生成完整目录结构 |
| 入门模板 | assets/ | 可直接使用的模板文件:config/cucumber.js、features/sample.feature、steps/sample.steps.ts、support/world.ts、support/hooks.ts、utils/config.ts、tsconfig/tsconfig.json — 将相关文件复制到项目中,而不是从头编写 |
| 特性文件 | references/feature-files.md | 编写 Gherkin:Scenario、Outline、Background、DataTable |
| 步骤定义 | references/step-definitions.md | Given/When/Then、参数类型、World 类型 |
| 钩子与 World | references/hooks-and-world.md | World 类、Before/After、浏览器生命周期 |
| 标签与配置文件 | references/tags-and-profiles.md | 标签表达式、cucumber.js 配置文件、并行执行 |
| 报告 | references/reporting.md | HTML/JSON/JUnit 报告、嵌入截图、CI 构建产物 |
| 反模式 | references/anti-patterns.md | 常见错误及其修复方法 |
如需了解页面对象、选择器、命名约定和文件夹结构,请加载
playwright-automation-expert参考文档:
references/page-object-model.mdreferences/selectors-locators.mdreferences/naming-conventions.mdreferences/folder-structure.md
约束
必须执行
- 在步骤定义中始终使用
async function (this: PlaywrightWorld),绝不使用箭头函数 - 在每个步骤和钩子中显式将
this声明为PlaywrightWorld - 所有 Playwright
page交互都放在 Page Objects 中,绝不放在步骤定义中 - 仅在
Then步骤中添加断言(expect()) - 在
Before钩子中为每个场景启动一个全新的浏览器 - 在
After钩子中的try/finally块内关闭浏览器 - 场景失败时,通过
this.attach()附加屏幕截图 - 在每个
cucumber.js配置文件中设置publishQuiet: true - 使用
{string}、{int}、{float}Cucumber 表达式作为步骤参数 - 为每个场景添加至少一个领域标签(
@auth、@checkout)和一个运行级别标签(@smoke、@regression) - 使
step_definitions/文件夹结构与features/文件夹结构一致 - 将所有环境配置(baseURL、凭据、超时)存放在
utils/config.ts中 - 在
tsconfig.json中使用"module": "commonjs"
禁止事项
- 在步骤定义中使用箭头函数(会导致
this绑定丢失) - 直接在步骤定义中进行 Playwright
page交互 - 在
Given或When步骤中添加断言 - 通过模块级变量在场景间共享可变状态
- 在步骤文件中硬编码 URL 或凭据
- 将
@playwright/test的test()运行器与 Cucumber 混用(两者不兼容) - 在
BeforeAll或AfterAll中访问this.page(没有可用的 World 实例) - 将生成的报告(
reports/)提交到源代码管理 - 省略
publishQuiet: true(会在 CI 中生成嘈杂的 Cucumber Cloud 提示) - 编写提及 UI 实现细节的步骤描述(例如“点击蓝色按钮”)
输出模板
实现 Cucumber BDD 测试时,始终先确认复杂度级别,然后提供:
级别 1 — 基础(单个功能,扁平结构)
- 脚手架命令
- 带 HTML reporter 的
cucumber.js - 一个
.feature文件 - 对应的
step_definitions/<name>.steps.ts
级别 2 — 中级(添加 Page Objects) 包含级别 1 的所有内容,另外包括: 5. 每个功能对应的 Page Object 类 6. 更新后的步骤,委托给 Page Objects
级别 3 — 高级(World + 钩子 + 配置)
包含级别 2 的所有内容,另外包括:
7. utils/world.ts — 自定义 World
8. utils/config.ts — 环境配置
9. tests/hooks.ts — Before/After 浏览器生命周期
10. utils/data-helpers.ts — 测试数据工厂
级别 4 — 企业级(配置文件 + CI)
包含级别 3 的所有内容,另外包括:
11. 多个 cucumber.js 配置文件(default、smoke、regression、sanity)
12. 完整的 package.json 脚本
13. .github/workflows/cucumber.yml CI 流水线
知识参考
@cucumber/cucumber、Playwright、BDD、Gherkin、Given When Then、功能文件、步骤定义、Scenario Outline、Background、DataTable、DocString、标签、标签表达式、cucumber.js 配置文件、World、CustomWorld、PlaywrightWorld、setWorldConstructor、Before、After、BeforeAll、AfterAll、钩子、ts-node、commonjs、HTML reporter、JSON reporter、JUnit reporter、屏幕截图嵌入、并行执行、冒烟测试、回归测试、冒烟检查、CI/CD、GitHub Actions