端到端测试框架

Playwright是一个由微软开发的现代化端到端测试框架,支持多浏览器自动化测试,适用于Web应用的质量保障。

  • by clinicorp
  • HTML
  • 本地部署
  • 更新于
在 GitHub 查看 clinicorp/pw-mcp

使用说明

🎭 剧作家测试自动化框架

用于 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();
  }
}

⚠️ 重要规则

  1. ✅ 始终使用明确的名称和目标 屏幕/功能
  2. ✅ 使用填充模块首字母缩略词 和 记录
  3. ❌ 不要使用空格或特殊字符 在 值 data-testid
  4. ✅ 用于可重复使用的组件允许通过 data-testid 通过道具
  5. ✅ 记录新模式 或例外

🎯 为什么这个标准很重要?

好处 描述
促进自动化 更强大,更容易编写的测试
减少维护 稳定的选择器不会破坏CSS的变化。
提高可追踪性 易于识别每个元素属于哪个模块/屏幕。
标准化通信 QA和Devs说同样的“语言”。
合作 开发人员知道要测试哪些元素。

🔄 实施流程

他们是clinicorp,或者 data-testid 它可以在不同的背景下实现:

  1. 比特云 共享组件
  2. DEV 仓库 项目的具体组成部分
  3. 故事书 - 组件文档
  4. 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)
}

📚 文档

官方资源

社区资源


🏆 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的原生解决方案那样强大。

🤝 贡献

欢迎捐款!为了贡献:

  1. 分叉工程
  2. 创建分支(git checkout -b feature/nova-feature)
  3. 提交您的更改(git commit -m 'Adiciona nova feature')
  4. 推动一个分支(git push origin feature/nova-feature)
  5. Abra um Pull请求

代码模式

  • 使用 data-test 或 data-testid 对于选择器
  • 遵循 Page Object Model 模式
  • 添加解释性评论
  • 保持独立和隔离的测试

📊 测试凭据

要在 Sauce Demo 中运行测试:

  • 用户名: standard_user
  • 密码: secret_sauce

📄 许可证

这个项目是MIT许可的。查看文件 LICENSE 了解更多详情。


👥 作者

由团队开发 Clinicorp工程


❤️ pwzin 剧作家

⬆ 返回顶部