使用说明
🎭 剧作家测试自动化框架
用于 Web 应用程序的现代端到端测试自动化框架
📖 关於Playwright
剧作家 它是一个端到端的测试自动化框架,由 微软于2020年推出。它允许您可靠,快速和跨浏览器地测试现代Web应用程序。
🏢 由 Microsoft 创建
Playwright是由微软团队开发的,该团队以前创建了Playwright。 操纵者于2020年1月发布,已迅速成为最受欢迎的测试自动化工具之一。
📊 令人印象深刻的统计
- ⭐ +65000颗星 没有GitHub(微软/剧作家)
- 📦 +1000万次下载 semanais没有npm
- 🌍 公司使用如 微软, 网飞, 奥多比, 声破天
- 🚀 增长 +200% 自2021年起采用
- 🔄 每月更新新功能
✨ 你是剧作家吗?
| 特点 | 描述 |
|---|---|
| 🎯 多浏览器 Chromium、Firefox 和 WebKit (Safari) 的原生支援 | |
| ⚡ 演出 | 并行执行和智能等待自动化 |
| 🔒 可靠性 自动等待、自动重试和隔离测试 | |
| 🎨 开发者体验 UI Mode,Codegen,Trace Viewer,高级调试 | |
| 🌐 交叉平台的 | Windows、macOS和Linux |
| 📱 移动测试 | 移动设备仿真 |
| 🎬 视频和截图 | 自动录制视频和屏幕截图 |
| 🔍 网络侦听 | 模拟请求和答案 |
🚀 快速安装
先决条件
- Node.js V18+(推荐V24.12.0 LTS)
- npm 或 纱线
一步一步
# 1. Clone o repositório
git clone https://github.com/clinicorp/pw-mcp.git
cd pw-mcp
# 2. Instale as dependências
npm install
# 3. Instale os browsers do Playwright
npx playwright install
# 4. Execute os testes
npm test
🎯 关于这个项目
本项目演示了使用自动化测试的实施 剧作家 para o网站 酱汁演示涵盖电子商务应用程序的主要流程:
- ✅ 验证和登录
- ✅ 购物车管理(添加/删除产品)
- ✅ 完整的结帐流程
- ✅ 界面和行为验证
🏗️ 建筑
pw-mcp/
├── tests/ # Suite de testes
│ ├── login.test.js # Testes de autenticação
│ ├── add-to-cart.test.js # Testes de adicionar ao carrinho
│ ├── remove-from-cart.test.js # Testes de remover do carrinho
│ └── checkout.test.js # Testes de checkout completo
├── utils/ # Utilitários e helpers
│ ├── page-objects.js # Page Object Model
│ └── urls.js # Gerenciamento de URLs
├── pages/ # Snapshots HTML de referência
├── playwright.config.js # Configuração do Playwright
└── package.json # Dependências do projeto
💻 TypeScript还是JavaScript?
或剧作家支持 两者 母语!选择最适合您的项目:
JavaScript (此工程)
const { test, expect } = require('@playwright/test');
test('login test', async ({ page }) => {
await page.goto('https://example.com');
await page.fill('[data-test="username"]', 'user');
await expect(page.locator('[data-test="welcome"]')).toBeVisible();
});
TypeScript
import { test, expect } from '@playwright/test';
test('login test', async ({ page }) => {
await page.goto('https://example.com');
await page.fill('[data-test="username"]', 'user');
await expect(page.locator('[data-test="welcome"]')).toBeVisible();
});
TypeScript的优势:
- ✅ 改进的类型安全和自动补全
- ✅ 在开发过程中检测错误
- ✅ 更好的 IDE 支持
- ✅ 更安全的再加工
JavaScript的优势:
- ✅ 更简单和直接
- ✅ 无需编译
- ✅ 减少初始配置
- ✅ 非常适合快速原型设计
🎨 良好做法和标准
🔍 Clinicorp标准: data-testid
钠 Clinicorp我们遵循一个严格和明确的标准来使用属性 data-testid 所有前端组件。这个标准是 强制 用于与测试自动化相关的元素,并促进维护和可追溯性。
📐 一般准则
1. 义务
✅ 所有与测试自动化相关的元素必须包含属性 data-testid.
2. 命名标准
的值 data-testid 必须遵循标准:
[sigla do elemento]-[nome da tela ou funcionalidade]-[sigla do módulo]
例如:
<button data-testid="btn-schedule-ODO">Agendar</button>
btn=活力do元素(按钮)schedule= 功能名称(调度)ODO= 模块的缩写
3. 列表中的项目
对于列表中出现或多次渲染的元素,请添加 最后的索引:
<!-- Primeiro item -->
<button data-testid="btn-edit-ODO-1">Editar</button>
<!-- Segundo item -->
<button data-testid="btn-edit-ODO-2">Editar</button>
📋 元素的首字母缩略词
| 元素 | 活力 | 示例 |
|---|---|---|
| 按钮 | btn |
btn-save-PAC |
| 标签 | lbl |
lbl-title-FIN |
| 输入 | txt 或 inp |
txt-search-PAC |
| 选择 | sel |
sel-status-FOU |
| Div | div |
div-container-ADM |
跨度;跨越;持续时间;(桥或拱的)墩距;跨距; 包括(广大地区) spn |
spn-message-ODO |
|
| 复选框 | chk |
chk-agree-PAC |
| 收音机 | rdo |
rdo-option-FIN |
| 链接 | lnk |
lnk-details-ODO |
| 表 | tbl |
tbl-users-ADM |
| 线 | row |
row-patient-PAC |
| Coluna | col |
col-name-FIN |
| 图标 | ico |
ico-edit-ODO |
模态 mdl |
mdl-confirm-PAC |
|
| 卡片 | crd |
crd-product-FOU |
| 工具提示 | tip |
tip-help-ADM |
| 阿凡达 | avt |
avt-user-FIN |
| 徽章 | bdg |
bdg-status-ODO |
💡 实际实例
PAC 模块登录屏幕上的保存按钮
<button data-testid="btn-save-PAC">Salvar</button>
PAC 模块患者屏幕上的搜索输入
<input data-testid="inp-search-PAC" type="text" />
FIN 模块财务屏幕上的标题标签
<label data-testid="lbl-title-FIN">Financeiro</label>
ADM 模块用户屏幕上的列表编辑按钮( 索引 3)
<button data-testid="btn-editar-ADM-3">Editar</button>
从 FOU 模块调度屏幕中选择状态
<select data-testid="sel-status-FOU">
<option value="active">Ativo</option>
<option value="inactive">Inativo</option>
</select>
🎯 Uso没有剧作家
// Método recomendado: getByTestId()
await page.getByTestId('btn-save-PAC').click();
await page.getByTestId('inp-search-PAC').fill('João Silva');
// Alternativa: locator com data-testid
await page.locator('[data-testid="btn-save-PAC"]').click();
📝 使用 Page Object 的实例
// Page Object usando padrão Clinicorp
class PacientePage {
constructor(page) {
this.page = page;
// ✅ Seletores seguindo padrão Clinicorp
this.searchInput = page.getByTestId('inp-search-PAC');
this.saveButton = page.getByTestId('btn-save-PAC');
this.titleLabel = page.getByTestId('lbl-title-PAC');
}
async buscarPaciente(nome) {
await this.searchInput.fill(nome);
}
async salvar() {
await this.saveButton.click();
}
}
⚠️ 重要规则
- ✅ 始终使用明确的名称和目标 屏幕/功能
- ✅ 使用填充模块首字母缩略词 和 记录
- ❌ 不要使用空格或特殊字符 在 值
data-testid - ✅ 用于可重复使用的组件允许通过
data-testid通过道具 - ✅ 记录新模式 或例外
🎯 为什么这个标准很重要?
| 好处 | 描述 |
|---|---|
| 促进自动化 更强大,更容易编写的测试 | |
| 减少维护 稳定的选择器不会破坏CSS的变化。 | |
| 提高可追踪性 易于识别每个元素属于哪个模块/屏幕。 | |
| 标准化通信 QA和Devs说同样的“语言”。 | |
| 合作 开发人员知道要测试哪些元素。 |
🔄 实施流程
他们是clinicorp,或者 data-testid 它可以在不同的背景下实现:
- 比特云 共享组件
- DEV 仓库 项目的具体组成部分
- 故事书 - 组件文档
- React组件 - 传递的属性
data-testid
📚 映射组件
一些组件已经映射到支持 data-testid:
<C_ButtonIcon>- 带图标的按钮<ButtonRC>React Component 按钮<C_ButtonFlat>Flat 按钮<TextField>-文本字段<C_Search>-搜索组件<TabContainer>-阿巴斯集装箱- 还有其他人我…
❌ 避免脆弱的选择器
// ❌ RUIM: Seletores baseados em CSS podem quebrar facilmente
await page.click('.btn-primary'); // Quebra se mudar a classe CSS
await page.click('#submit-btn'); // Quebra se mudar o ID
await page.click('div > button'); // Muito genérico, pode selecionar elemento errado
// ✅ BOM: Use o padrão Clinicorp com data-testid
await page.getByTestId('btn-save-PAC').click();
🧪 运行测试
主要命令
# Executar todos os testes em todos os browsers
npm test
# Executar em browser específico
npm run test:chromium # Chrome/Edge
npm run test:firefox # Firefox
npm run test:webkit # Safari
# Modo interativo (UI Mode) - Recomendado para desenvolvimento
npm run test:ui
# Executar com browser visível
npm run test:headed
# Ver relatório HTML
npm run test:report
速度设置
# Execução rápida (sem delay)
npm run test:fast
# Execução com delay para visualização (padrão)
npm test
🎭 经过测试的功能
1 。🔐 认证
- 使用有效凭据登录
- 验证无效的凭据
- 登录后重定向
2 。🛒 购物车管理
- 添加产品到购物车
- 从购物车中删除产品
- 更新购物车徽章
- 验证购物车中的项目
3 。💳 结账完成
- 填写信息
- 验证必填字段
- 审查请求
- 购买确认
⚙️ 配置
多浏览器测试
测试配置为自动运行:
- 🌐 铬 (Chrome、Edge、Opera)
- 🦊 火狐 (Mozilla)
- 🍎 引擎 (Safari)
慢动作(Slow Motion)
为了方便开发过程中的可视化,测试包括: slowMo: 2000ms (操作间隔2秒)这可以调整为 playwright.config.js:
launchOptions: {
slowMo: 2000, // Ajuste conforme necessário (0 para execução rápida)
}
📚 文档
官方资源
社区资源
- 💬 社区分歧
- 🐦 推特@playwrightweb
- 📺 YouTube频道
🏆 Playwright的优势
与Selenium相比
| 特色 | Playwright | Selenium |
|---|---|---|
| 速度 | ⚡ 非常快。🐌 更慢 。 | |
| 自动等待 | ✅ 科特迪瓦 | ❌ 手册 |
| 多浏览器 | ✅ 科特迪瓦 | ⚠️ 需求驱动程序 |
| API Moderna | ✅ 异步/等待 | ⚠️ 回调 |
| 调试 | ✅ 跟踪查看器 | ⚠️ 利米塔多 |
与Cypress相比
| 特色 | Playwright | Cypress |
|---|---|---|
| 多浏览器 | ✅ Chromium、Firefox、WebKit✅ Chrome、Edge、Firefox、WebKit* | |
| 平行性 | ✅ 原生(无成本)⚠️ 需要 Cypress Dashboard(付费)或手动设置 | |
| 移动测试✅ 原生模拟 | ⚠️ 有限 | |
| 网络 Mock✅ 先进拦截。✅ 拦截(cy.intercept) | ||
| 执行 | ✅ 无头和头。⚠️ 专注于发展。 | |
| 建筑 | ✅ 浏览器之外。⚠️ 在浏览器中。 | |
| 性能 | ✅ ~2-4倍更快*⚠️ 由于建筑,速度较慢。 |
*基于基准:Playwright的测试速度大约是Cypress的2-4倍,因为它的架构直接与DevTools协议交互,而Cypress则在浏览器内运行,增加了额外的开销。
注释 :
- Cypress支持多个浏览器,但与Playwright的全面支持相比,Firefox和WebKit有一些限制。
- Cypress 上的并行:本机并行需要 Cypress Dashboard Service(付费计划)。开源替代方案存在,但需要手动配置,并且不像Playwright的原生解决方案那样强大。
🤝 贡献
欢迎捐款!为了贡献:
- 分叉工程
- 创建分支(
git checkout -b feature/nova-feature) - 提交您的更改(
git commit -m 'Adiciona nova feature') - 推动一个分支(
git push origin feature/nova-feature) - Abra um Pull请求
代码模式
- 使用
data-test或data-testid对于选择器 - 遵循 Page Object Model 模式
- 添加解释性评论
- 保持独立和隔离的测试
📊 测试凭据
要在 Sauce Demo 中运行测试:
- 用户名:
standard_user - 密码:
secret_sauce
📄 许可证
这个项目是MIT许可的。查看文件 LICENSE 了解更多详情。
👥 作者
由团队开发 Clinicorp工程
- 📧 电子邮件:contato@clinicorp.com
- 🌐 网站: www.clinicorp.com
- 💼 领英: Clinicorp
❤️ pwzin 剧作家