Playwright 简介 #

什么是 Playwright? #

Playwright 是由 Microsoft 开发的现代端到端(E2E)测试框架,专为现代 Web 应用设计。它支持所有主流浏览器引擎(Chromium、Firefox、WebKit),提供可靠、快速且强大的自动化测试能力。Playwright 可以跨平台、跨语言使用,支持 JavaScript/TypeScript、Python、Java 和 .NET。

核心定位 #

text
┌─────────────────────────────────────────────────────────────┐
│                        Playwright                            │
├─────────────────────────────────────────────────────────────┤
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │  跨浏览器    │  │  自动等待    │  │  原生事件    │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │  网络拦截    │  │  追踪查看    │  │  并行执行    │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
└─────────────────────────────────────────────────────────────┘

Playwright 的历史 #

发展历程 #

text
2020年 ─── Playwright 项目启动
    │
    │      Microsoft 团队开发
    │      核心成员来自 Puppeteer
    │
2020年中 ─── 首个公开版本
    │
    │      支持 Chromium、Firefox、WebKit
    │      跨浏览器测试能力
    │
2021年 ─── 快速迭代
    │
    │      测试运行器
    │      追踪查看器
    │      代码生成工具
    │
2022年 ─── 生态成熟
    │
    │      组件测试
    │      视觉回归测试
    │      VS Code 插件
    │
2023年 ─── 企业级采用
    │
    │      大规模部署支持
    │      云服务集成
    │      性能优化
    │
至今   ─── 行业标准
    │
    │      超过 100 万周下载量
    │      主流企业采用
    │      活跃社区支持

里程碑版本 #

版本 时间 重要特性
1.0 2020 首个稳定版本,跨浏览器支持
1.10 2021 测试运行器、追踪查看器
1.20 2021 组件测试、网络 Mock
1.25 2022 VS Code 插件、UI 模式
1.30 2022 视觉回归测试增强
1.40 2023 性能优化、新断言
1.50 2024 AI 辅助测试、增强调试

为什么选择 Playwright? #

传统 E2E 测试的痛点 #

在使用传统测试工具时,开发者面临以下问题:

javascript
// Selenium 需要显式等待
driver.get("https://example.com");
await driver.wait(
  until.elementLocated(By.id("button")),
  10000
);
const button = driver.findElement(By.id("button"));
await button.click();

// 容易出现竞态条件
// 元素可能存在但不可见/不可点击
// 需要手动处理各种等待

Playwright 的解决方案 #

javascript
// 自动等待,无需显式等待
await page.goto("https://example.com");

// 自动等待元素可见、可点击
await page.click("#button");

// 智能重试,自动处理动态内容
await expect(page.locator(".result")).toHaveText("Success");

Playwright 的核心特点 #

1. 跨浏览器支持 #

一套代码,多浏览器运行:

javascript
// 支持所有主流浏览器
const browsers = ['chromium', 'firefox', 'webkit'];

for (const browserType of browsers) {
  const browser = await playwright[browserType].launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
  // 相同的测试代码
}

2. 自动等待机制 #

智能等待元素状态:

text
┌─────────────────────────────────────────────────────────────┐
│                    Playwright 自动等待                        │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  操作前自动检查:                                             │
│  ├── 元素已附加到 DOM                                        │
│  ├── 元素可见                                                │
│  ├── 元素稳定(非动画中)                                     │
│  ├── 元素可接收事件                                          │
│  └── 元素已启用                                              │
│                                                             │
└─────────────────────────────────────────────────────────────┘

3. 原生事件支持 #

支持真实的用户交互:

javascript
// 键盘事件
await page.keyboard.press('Enter');
await page.keyboard.type('Hello World');

// 鼠标事件
await page.mouse.click(100, 200);
await page.mouse.move(0, 0);

// 触摸事件
await page.touchscreen.tap(100, 200);

// 拖拽操作
await page.locator('#source').dragTo(page.locator('#target'));

4. 强大的选择器引擎 #

多种元素定位方式:

javascript
// CSS 选择器
await page.locator('button.submit').click();

// 文本选择器
await page.locator('text=Submit').click();

// 角色选择器(推荐)
await page.getByRole('button', {
最后更新:2026-03-28