使用说明
Ciklum剧作家演示
Enterprise Playwright+TypeScript自动化框架。将六年AQA实践编纂成最小框架:键入的页面对象、组件组合、夹具链、 @step 报告装饰器和快速故障全局环境层。
特性
- 具有组件组合的页面对象模型 —
AppPage,AppComponent,以及BasePage共享之上的抽象类PageHolder. @step装饰器 --TypeScript stage-3装饰器将方法封装在test.step({ box: true })因此HTML报告读起来像用户叙述。- 固定链 —
baseFixture提供pages和globalEnv;每个功能装置(demoTest等)在不接触基座的情况下延伸它。 - 键入全局环境 —
envalid验证process.env在globalSetup并通过序列化将结果传递给工人process.env.globalEnv钥匙。 - Biome+赫斯基预提交门 --每次提交时使用lint和格式化,使用单个二进制工具(没有ESLint+Prettier zoo)。
- 确定执行 —
workers: 1,fullyParallel: false默认情况下。再现性优先,只有在证明夹具隔离后才能提高平行度。
先决条件
- Node.js 18+
- npm
- 谷歌Chrome浏览器(通过安装
npx playwright install chrome)- 在Arch Linux上,通过pacman安装Chromium并设置
PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/bin/chromium(和下降channel: "chrome"从playwright.config.ts当地)。
- 在Arch Linux上,通过pacman安装Chromium并设置
快速开始
git clone https://github.com/ochako222/playwright-demo.git
cd playwright-demo
npm install
cp .env.example .env
npx playwright install chrome
npx playwright test
打开HTML报告:
npx playwright show-report
项目结构
.
├── configs/setup/ # Typed global env layer
│ ├── globalTypes.ts # GlobalVariablesI interface
│ ├── globalHelpers.ts # envalid validator
│ └── globalSetup.ts # Playwright globalSetup entry
├── src/
│ ├── app/ # Page Object Model
│ │ ├── abstractClasses.ts # PageHolder / BasePage / AppPage / AppComponent
│ │ ├── components/ # Reusable widgets (*.component.ts)
│ │ ├── home.page.ts # Concrete pages (*.page.ts)
│ │ └── index.ts # AppPages container
│ ├── fixtures/
│ │ ├── index.ts # baseFixture (globalEnv + pages)
│ │ └── demoTest.ts # Per-feature fixture
│ ├── misc/
│ │ └── step.ts # @step decorator
│ └── tests/ # *.spec.ts
├── biome.json
├── playwright.config.ts
└── tsconfig.json
脚本
| 命令 | 目的 |
|---|---|
npm run lint |
运行Biome lint+格式检查 |
npm run format |
自动格式化代码库 |
npx playwright test |
运行完整的套件 |
npx playwright test --ui |
启动Playwright UI模式 |
npx playwright test --grep @regression |
仅运行标记的测试 @regression |
npx playwright test --debug |
与剧作家检查员沟通 |
npx playwright show-report |
打开最后一个HTML报告 |
环境变量
定义于 .env (复制自 .env.example):
| 变量 | 必需 | 值 | 目的 |
|---|---|---|---|
BASE_URL |
是 | 任何URL | 正在测试的应用程序 |
ENVIRONMENT |
是的 | dev |
qa |
验证发生在 configs/setup/globalHelpers.ts --该套件拒绝在缺少或格式错误的值时启动。
编写测试
import { demoTest } from "src/fixtures/demoTest";
demoTest.describe("Cart", { tag: ["@cart", "@regression"] }, () => {
demoTest("adds item to cart", async ({ pages, globalEnv }) => {
await pages.homePage.goto(globalEnv.BASE_URL);
await pages.homePage.expectLoaded();
// ...
});
});
仅消耗测试所需的夹具。操作在页面对象上,而不是在规范中。
添加页面
- 创建
src/app/newPage.page.ts延伸AppPage(或BasePage). - 实施
expectLoaded(). - 将定位器声明为
private内联字段。 - 用以下方式装饰公共方法
@step("...")为了提高报告的可见性。 - 在中注册页面
src/app/index.ts.
添加组件
- 创建
src/app/components/<name>.component.ts延伸AppComponent. - 在所属页面内实例化它:
public foo = new FooComponent(this.page, this.context);
命名规范
| 种类 | 惯例 | 示例 |
|---|---|---|
| 第页 | *.page.ts |
home.page.ts |
| 组件 | *.component.ts |
demo.component.ts |
| 测试规范 | *.spec.ts |
demoTest.spec.ts |
| 接口 | PascalCase + I |
GlobalVariablesI |
提交工作流
哈士奇跑 npx @biomejs/biome check --write 在每次承诺之前。修复Biome无法自动修复、重新暂存和再次提交的任何错误。
许可证
国际学生中心