Playwright 安装&配置文件详解

Playwright 安装&配置文件详解

环境准备

  • Node.js 14.0+(推荐 LTS 版本)
  • npm(推荐使用最新版)
  • 支持 Windows、macOS、Linux

一步到位的官方推荐安装方式

1. 进入你的项目目录

bash 复制代码
# Windows
cd 路径\到\你的项目
# macOS/Linux
cd /path/to/your/project

2. 初始化 Playwright 项目

bash 复制代码
npm init playwright@latest

操作提示:

在出现选项时,请用键盘的上下方向键选择你想要的内容,然后按**回车(Enter)**键确认。

执行后会进入交互式引导,每个选项说明如下

选项1:Do you want to use TypeScript or JavaScript?
  • TypeScript :推荐(如果你的项目文件是 .ts 结尾,选这个)
  • JavaScript :如果你只用 .js 文件可以选这个
选项2:Where to put your end-to-end tests?
  • 输入测试用例目录名,建议用 testse2e(如果已有同名目录会复用)
选项3:Add a GitHub Actions workflow? (y/N)
  • y:生成 GitHub Actions 工作流文件,方便 CI 自动化
  • n:不生成(本地开发可选 n)
选项4:Install Playwright browsers? (Y/n)
  • Y:自动下载 Chromium、Firefox、Webkit 三大主流浏览器(推荐)
  • n :跳过,后续可手动 npx playwright install

3. 运行初始化命令后的效果

Playwright 会自动:

  • 初始化 npm 项目(如无 package.json 会自动创建)
  • 安装 Playwright 及相关依赖
  • 下载主流浏览器
  • 生成测试配置和示例代码

生成的目录结构示例

复制代码
playwright/
├── playwright.config.ts           # Playwright 测试配置文件
├── package.json                   # 项目依赖与脚本
├── package-lock.json              # 依赖锁定
├── node_modules/                  # 依赖包
├── tests/                         # 主测试目录
│   └── example.spec.ts            # 官方示例测试
├── tests-examples/                # 额外官方示例
│   └── demo-todo-app.spec.ts      # TodoMVC 端到端测试
├── .gitignore                     # 忽略文件
└── README.md                      # 项目说明

详细文件与目录说明

  • playwright.config.ts

    • Playwright 的主配置文件。

    • 作用:配置测试目录、并发、重试、报告、支持的浏览器(Chromium/Firefox/Webkit)等。

    • 详细配置说明:

      typescript 复制代码
      import { defineConfig, devices } from '@playwright/test';
      
      export default defineConfig({
        // 测试目录配置
        testDir: './tests',                    // 测试文件目录
        testMatch: '**/*.spec.ts',             // 测试文件匹配模式
        timeout: 30000,                        // 单个测试超时时间(毫秒)
        
        // 全局设置
        globalTimeout: 600000,                 // 所有测试总超时时间
        expect: {
          timeout: 5000,                       // expect 断言超时时间
          toHaveScreenshot: { maxDiffPixels: 100 }, // 截图对比配置
        },
        
        // 并发配置
        workers: process.env.CI ? 1 : undefined, // CI 环境单进程,本地多进程
        fullyParallel: true,                   // 是否完全并行运行测试
        
        // 重试配置
        retries: process.env.CI ? 2 : 0,       // CI 环境失败重试 2 次
        
        // 报告配置
        reporter: [
          ['html'],                            // HTML 报告
          ['list']                             // 命令行报告
        ],
        
        // 浏览器配置
        use: {
          // 基础配置
          baseURL: 'http://localhost:3000',    // 基础 URL
          trace: 'on-first-retry',             // 失败时记录追踪
          screenshot: 'only-on-failure',       // 失败时截图
          
          // 浏览器配置
          viewport: { width: 1280, height: 720 }, // 视窗大小
          ignoreHTTPSErrors: true,             // 忽略 HTTPS 错误
          video: 'on-first-retry',             // 失败时录制视频
          
          // 上下文配置
          locale: 'zh-CN',                     // 浏览器语言
          timezoneId: 'Asia/Shanghai',         // 时区
          geolocation: { longitude: 116.3, latitude: 39.9 }, // 地理位置
          permissions: ['geolocation'],        // 权限设置
        },
        
        // 多浏览器配置
        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'] },
          },
          {
            name: 'Mobile Safari',
            use: { ...devices['iPhone 12'] },
          },
        ],
        
        // 输出配置
        outputDir: 'test-results/',            // 测试结果输出目录
        
        // 其他配置
        preserveOutput: 'always',              // 保留输出文件
        forbidOnly: !!process.env.CI,          // CI 环境禁止 .only
        quiet: false,                          // 是否静默输出
      });
    • 配置项详解:

      1. 测试目录配置

        • testDir: 指定测试文件所在目录
        • testMatch: 指定测试文件匹配模式
        • timeout: 单个测试用例超时时间
      2. 全局设置

        • globalTimeout: 所有测试的总超时时间
        • expect: 断言相关配置
          • timeout: 断言等待超时时间
          • toHaveScreenshot: 截图对比配置
      3. 并发配置

        • workers: 并行运行的测试进程数
        • fullyParallel: 是否允许完全并行运行
      4. 重试配置

        • retries: 测试失败时的重试次数
        • 建议在 CI 环境设置重试,本地开发可不设置
      5. 报告配置

        • reporter: 测试报告格式
        • 支持多种报告格式:html、list、dot、json 等
        • 可同时使用多个报告器
      6. 浏览器配置

        • use: 全局浏览器配置
          • baseURL: 基础 URL,所有测试都会基于此 URL
          • trace: 追踪记录配置
          • screenshot: 截图配置
          • viewport: 视窗大小
          • video: 视频录制配置
          • locale: 浏览器语言
          • timezoneId: 时区设置
          • geolocation: 地理位置模拟
          • permissions: 浏览器权限设置
      7. 多浏览器配置

        • projects: 定义多个测试项目
        • 每个项目可以配置不同的浏览器和设备
        • 支持桌面端和移动端设备
        • 可以使用预定义的设备配置
      8. 输出配置

        • outputDir: 测试结果输出目录
        • preserveOutput: 输出文件保留策略
      9. 其他配置

        • forbidOnly: 是否禁止使用 .only
        • quiet: 是否静默输出
        • use: 全局使用配置
    • 最佳实践建议:

      1. 根据项目需求选择合适的配置项
      2. CI 环境和本地开发环境使用不同配置
      3. 合理设置超时时间和重试次数
      4. 使用多浏览器配置确保跨浏览器兼容性
      5. 配置适当的报告格式便于问题分析
      6. 合理使用追踪、截图和视频录制功能
  • package.json

    • Node.js 项目的依赖和脚本清单。
    • 作用:记录项目依赖(如 @playwright/test)、脚本命令、项目描述等。
    • 主要内容:
      • devDependencies:Playwright 及类型依赖。
      • scripts:可自定义测试命令。
      • descriptionauthorlicense 等元信息。
  • package-lock.json

    • 依赖锁定文件。
    • 作用:确保团队成员安装的依赖版本一致,避免"我的能跑你的不能跑"。
  • node_modules/

    • 依赖包目录。
    • 作用:存放所有通过 npm 安装的依赖。
    • 注意:此目录通常不需要提交到 git。
  • tests/

    • 主测试目录。
    • 作用:存放你的 E2E 测试用例。
    • 默认包含 example.spec.ts,内容演示 Playwright 的基本用法。
    • 你可以在此目录下添加、组织自己的测试文件。
  • tests/example.spec.ts

    • 官方自动生成的示例测试。
    • 作用:帮助你快速了解 Playwright 的基本断言、页面操作等。
    • 内容示例:
      • 访问官网,断言标题
      • 点击"Get started"链接,断言页面内容
  • tests-examples/

    • 额外官方示例目录。
    • 作用:提供更复杂的端到端测试案例,便于参考和学习。
  • tests-examples/demo-todo-app.spec.ts

    • TodoMVC 应用的完整端到端测试。
    • 作用:演示 Playwright 如何测试真实的前端应用,包括增删查改、状态断言等。
    • 内容较长,适合进阶学习。

4. 运行你的第一个测试

bash 复制代码
npx playwright test
  • 会自动运行 tests/ 目录下的所有测试用例
  • 首次运行会自动打开浏览器下载和测试报告

5. 常见问题与建议

  • TypeScript/JavaScript 选错了怎么办?
    • 重新运行 npm init playwright@latest,或手动调整文件后缀和配置
  • 已有测试目录/配置怎么办?
    • 初始化时如遇同名文件,Playwright 会提示是否覆盖,谨慎选择
  • 浏览器没装全?
    • 可随时运行 npx playwright install 补装
  • 如何自定义配置?
    • 修改 playwright.config.ts

6. 参考:自动生成的示例测试内容

tests/example.spec.ts 示例:

ts 复制代码
import { test, expect } from '@playwright/test';

test('has title', async ({ page }) => {
  await page.goto('https://playwright.dev/');
  await expect(page).toHaveTitle(/Playwright/);
});

test('get started link', async ({ page }) => {
  await page.goto('https://playwright.dev/');
  await page.getByRole('link', { name: 'Get started' }).click();
  await expect(page.getByRole('heading', { name: 'Installation' })).toBeVisible();
});

7. 小结

  • Playwright 官方初始化命令一步到位,自动生成配置、示例和依赖
  • 每个交互选项都可根据实际项目需求选择
  • 生成的目录和文件结构清晰,便于团队协作和持续集成
相关推荐
试着16 天前
playwrite和selenium的区别
selenium·测试工具·playwright
雨中夜归人1 个月前
自动化测试工具playwright中文文档-------14.Chrome 插件
python·测试工具·自动化·pytest·playwright
亿牛云爬虫专家1 个月前
浏览器自动化检测对抗:修改navigator.webdriver属性的底层实现
python·selenium·自动化·爬虫代理·amazon·代理ip·playwright
阿福不是狗1 个月前
Playwright之自定义浏览器目录访问出错:BrowserType.launch: Executable doesn‘t exist
python·自动化·playwright
梦想画家1 个月前
Playwright从入门到实战:比Selenium更快的数据爬取案例实战
selenium·测试工具·playwright
skywalk81632 个月前
自动化浏览器的测试框架playwright 支持多种浏览器Chromium、Firefox 和 WebKit
前端·chrome·自动化·测试·playwright
测试工程师成长之路2 个月前
Playwright + MCP:用AI对话重新定义浏览器自动化,效率提升300%!
自动化测试·人工智能·playwright
<e^πi+1=0>2 个月前
playwright-go实战:自动化登录测试
go·playwright
亿牛云爬虫专家3 个月前
动态内容加载的解决方案:Selenium与Playwright对比故障排查实录
selenium·测试工具·爬虫代理·playwright·机票·特价·亚航