TypeScript + Playwright

现代浏览器自动化
从入门到精通

Playwright 是由 Microsoft 开源的下一代浏览器自动化框架。
TypeScript 是 Playwright 的原生语言,拥有最完整的类型提示和 API 支持。

// 为什么选择 Playwright + TypeScript

原生 TypeScript 支持的自动化框架

TS

完整类型推导

Playwright 本身用 TypeScript 编写,提供一流的类型定义,编辑器智能提示和编译期错误检查。

自动等待机制

智能等待元素可操作后再执行动作,告别手动等待,代码更稳定可靠。

多浏览器支持

一套 API 同时支持 Chromium、Firefox 和 WebKit (Safari),无需切换工具。

🔧

内置测试运行器

Playwright Test 是专为 E2E 设计的测试运行器,支持并行、重试、分片和 HTML 报告。

网络拦截

完整的网络请求拦截与 Mock 能力,轻松模拟任何 API 响应和网络状态。

📷

Trace Viewer

时间线回放调试工具,记录每一步操作的 DOM 快照、网络请求和控制台日志。

// 快速开始

三步上手 Playwright TypeScript

1

初始化项目

使用官方命令初始化 Playwright 项目,自动生成配置和示例文件。

terminal
npm init playwright@latest
# 或指定使用 TypeScript
npm init playwright@latest -- --lang=TypeScript
2

编写第一个测试

使用 Playwright Test 编写类型安全的端到端测试。

tests/example.spec.ts
import { test, expect } from '@playwright/test';

test('页面标题验证', async ({ page }) => {
  await page.goto('https://playwright.dev');
  await expect(page).toHaveTitle(/Playwright/);
});

test('点击入门链接', async ({ page }) => {
  await page.goto('https://playwright.dev');
  await page.getByRole('link', { name: 'Get started' }).click();
  await expect(page.getByRole('heading', { name: 'Installation' })).toBeVisible();
});
3

运行测试

使用 Playwright Test Runner 运行,默认并行执行。

terminal
npx playwright test
# 带 UI 模式运行
npx playwright test --ui
# 查看 HTML 报告
npx playwright show-report
// 项目配置

playwright.config.ts 配置详解

Playwright Test 的核心配置文件,定义浏览器、超时、重试等运行参数。

playwright.config.ts
import { defineConfig, devices } from '@playwright/test';

export default defineConfig({
  testDir: './tests',
  fullyParallel: true,           // 完全并行执行
  forbidOnly: !!process.env.CI,    // CI 中禁止 .only
  retries: process.env.CI ? 2 : 0, // CI 中重试 2 次
  workers: process.env.CI ? 1 : undefined,
  reporter: 'html',               // HTML 报告

  use: {
    baseURL: 'http://localhost:3000',
    trace: 'on-first-retry',       // 首次重试时记录追踪
    screenshot: 'only-on-failure', // 失败时截图
  },

  projects: [
    {
      name: 'chromium',
      use: { ...devices['Desktop Chrome'] },
    },
    {
      name: 'firefox',
      use: { ...devices['Desktop Firefox'] },
    },
    {
      name: 'webkit',
      use: { ...devices['Desktop Safari'] },
    },
    {
      name: 'Mobile Chrome',
      use: { ...devices['Pixel 5'] },
    },
  ],
});
// 学习路线

继续探索