Playwright logo

Playwright

现代端到端测试与浏览器自动化框架

精选工具测试工具E2E测试跨浏览器测试自动化测试

Playwright 是微软开源的端到端测试框架,支持 Chromium、Firefox、WebKit 三引擎,提供自动等待、网络拦截、多标签页和 Trace Viewer 调试能力,是 2026 年 E2E 测试首选方案之一。

Playwright 现代 E2E 与浏览器自动化技术调研

Playwright 是 Microsoft 开源的端到端测试与浏览器自动化框架,支持 Chromium、Firefox、WebKit 三引擎,提供自动等待、强大定位器、网络拦截、多标签页、移动端模拟和 Trace Viewer 调试能力。2026 年它已是新项目 E2E 测试的首选方案之一,并与 Vitest Browser Mode、组件测试深度集成。


一、 基本信息

维度关键指标 / 描述
技术标签E2E 测试 / 浏览器自动化 / 跨浏览器 / 组件测试
开发商Microsoft
官方网站https://playwright.dev/
GitHub 仓库microsoft/playwright
npm 包@playwright/test
许可协议Apache 2.0
首次发布2020 年
当前版本Playwright 1.5x(2026 年持续更新)
生态成熟度极高(E2E 领域增长最快框架之一)

二、 技术定位与简介

Playwright 覆盖:

  • E2E 测试:模拟用户完整业务流程。
  • API 测试request fixture 直接测 HTTP。
  • 组件测试@playwright/experimental-ct-* 在真实浏览器测单组件。
  • 浏览器自动化:爬虫、截图、PDF、性能采集。
  • Vitest 集成:作为 Vitest Browser Mode 的 provider。

核心优势:自动等待元素可操作才执行,显著降低 flaky 测试;Trace Viewer 提供时间旅行级调试体验。


三、 快速上手安装说明

1. 安装

pnpm create playwright
# 或
pnpm add -D @playwright/test
npx playwright install

2. playwright.config.ts

import { defineConfig, devices } from '@playwright/test'
 
export default defineConfig({
  testDir: 'tests/e2e',
  fullyParallel: true,
  retries: process.env.CI ? 2 : 0,
  use: {
    baseURL: 'http://localhost:3000',
    trace: 'on-first-retry',
  },
  projects: [
    { name: 'chromium', use: { ...devices['Desktop Chrome'] } },
    { name: 'firefox', use: { ...devices['Desktop Firefox'] } },
    { name: 'webkit', use: { ...devices['Desktop Safari'] } },
  ],
  webServer: {
    command: 'pnpm dev',
    url: 'http://localhost:3000',
    reuseExistingServer: !process.env.CI,
  },
})

3. 第一个测试

import { test, expect } from '@playwright/test'
 
test('homepage has title', async ({ page }) => {
  await page.goto('/')
  await expect(page).toHaveTitle(/My App/)
})
 
test('login flow', async ({ page }) => {
  await page.goto('/login')
  await page.getByLabel('Email').fill('[email protected]')
  await page.getByLabel('Password').fill('password')
  await page.getByRole('button', { name: 'Sign in' }).click()
  await expect(page.getByText('Welcome')).toBeVisible()
})

4. 运行

npx playwright test
npx playwright test --ui
npx playwright show-report

5. 网络 Mock

await page.route('**/api/users', (route) => {
  route.fulfill({
    status: 200,
    body: JSON.stringify([{ id: 1, name: 'Alice' }]),
  })
})

四、 核心特性

1. 自动等待

操作前自动等待元素可见、稳定、可点击。

2. 强大定位器

getByRolegetByLabelgetByTextgetByTestId,支持链式过滤。

3. 跨浏览器三引擎

Chromium、Firefox、WebKit 一套 API。

4. Trace Viewer

失败重试时录制 trace,npx playwright show-trace 逐步回放。

5. 网络控制

拦截、修改、Mock 请求与响应。

6. 多上下文与认证

storageState 复用登录态,多用户场景。

7. 并行与分片

--shard=1/3 CI 矩阵加速。

8. Codegen

npx playwright codegen 录制生成测试代码。

9. MSW 互补

E2E 可用 route 或启动带 MSW 的应用。


五、 适用场景

1. 黄金适用场景

  • 关键用户路径 E2E(登录、支付、发布)。
  • 跨浏览器兼容性验证。
  • 回归测试自动化。
  • CI 合并前门禁。
  • API + UI 混合测试。
  • 截图/视觉回归(配合第三方或内置)。

2. 局限适用场景

  • 大量单元逻辑(用 Vitest)。
  • 纯样式像素级(专用视觉工具)。
  • 极简单页(可能过度)。
  • 营销页按项目规范优先 build + 抽检 E2E。

六、 技术亮点

1. 稳定性

自动等待大幅减少 flaky。

2. 调试体验

UI Mode、Trace、视频录制。

3. 现代架构

WebSocket 连接浏览器,非 WebDriver 老旧协议。

4. 微软持续投入

更新频率高,文档完善。

5. 测试即代码

TypeScript 一等公民。


七、 核心概念与架构

digraph Playwright_Architecture {
  rankdir=LR
  node [shape=box, style="rounded,filled", fillcolor="#f0f9ff"]
  Test [label="@playwright/test", fillcolor="#bae6fd"]
  Runner [label="Test Runner"]
  Browser [label="Browser Server"]
  Context [label="BrowserContext"]
  Page [label="Page"]
  App [label="Web App"]
 
  Test -> Runner
  Runner -> Browser
  Browser -> Context
  Context -> Page
  Page -> App
}

八、 技术局限与边界

  1. 速度:比单元测试慢,应用例精选。
  2. 维护成本:UI 变更需更新定位器。
  3. 资源:CI 需安装浏览器,内存占用较高。
  4. 学习曲线:异步、fixtures、网络 Mock 需练习。
  5. 组件测试仍 experimental:大规模组件测优先 Vitest Browser。
  6. iOS 真机:非 Appium 级原生应用测试。

九、 生态地图

类别集成
CIGitHub Actions、GitLab CI
报告HTML Report、Allure
Mockpage.route、MSW
VitestBrowser Mode provider
Docker官方 Playwright Docker 镜像

十、 生态集成

方向说明
Next.jswebServer 启动 dev server。
MSW应用内 MSW 或 Playwright route。
GitHub Actionsmicrosoft/playwright-github-action
Vitest@vitest/browser-playwright
本项目E2E 放 apps/tests/e2e/

十一、 开发与工程化

1. 目录结构(本项目)

apps/tests/e2e/
  auth/
    login.spec.ts
  marketing/
    homepage.spec.ts

2. 登录态复用

// global-setup.ts 保存 storageState
// config 中 use: { storageState: 'auth.json' }

3. 稳定定位器

优先 getByRolegetByLabel,避免脆弱 CSS 选择器。


十二、 性能与安全

  • CI 使用官方 Docker 镜像缓存浏览器。
  • fullyParallel 注意测试间数据隔离。
  • 测试账号与 secrets 放 CI 环境变量。
  • 勿在测试中硬编码生产凭证。
  • tracevideo 可能含敏感信息,控制 artifact 保留策略。

十三、 技术对比

工具优势局限适合
Playwright稳定、三引擎、调试强资源占用现代 E2E 首选
CypressDX 好、时间旅行仅 Chromium 系为主前端团队传统选择
Puppeteer底层控制非完整测试框架脚本自动化
Selenium最广兼容慢、flaky遗留企业

十四、 最佳实践

  1. 测关键路径,不追求全页面 E2E 覆盖。
  2. 使用语义定位器,与 Testing Library 理念一致。
  3. 启用 trace: 'on-first-retry' 便于 CI 排障。
  4. webServer 自动启停 dev server。
  5. 登录态 storageState 复用,加速套件。
  6. 测试数据独立,避免并行冲突。
  7. 营销页按项目规范:typecheck + build + 关键 E2E。
  8. 与 Vitest 分工:单元/集成 Vitest,流程 Playwright。
  9. 定期审查 flaky 测试并修复根因,非盲目 retry。
  10. MSW 用于稳定 API,Playwright route 用于 E2E 特设场景。

十五、 学习与社区资源