用途
Playwright 用于端到端测试、浏览器自动化和网页抓取。当用户提到 "playwright"、"e2e testing"、"end to end test"、"browser" 等关键词时适用。
安装与配置
初始化项目:
npm init playwright@latest # scaffolds project with config, sample test, browsers
npx playwright install # install all browsers
npx playwright install chromium # install single browser
配置示例(playwright.config.ts)可定义 testDir、fullyParallel、forbidOnly、retries、workers、reporter,并在 use 中设置 baseURL、trace、screenshot、video,在 projects 中配置 chromium、firefox、webkit、mobile-chrome 等多浏览器设备,还可通过 webServer 指定启动命令与 URL。
编写测试
在测试中使用 test、expect 和 test.describe、test.beforeEach 组织用例。Playwright 在执行操作前会自动等待元素可见、稳定、启用并接收事件,断言会按超时(默认 5 秒)自动重试。
定位器
优先使用基于角色和面向用户的定位器,而非 CSS 选择器。
- 角色定位:page.getByRole('button', { name: 'Sign In' })、getByRole('heading', ...)、getByRole('textbox', ...)、getByRole('checkbox', ...)
- 文本与标签:getByText、getByLabel、getByPlaceholder、getByTestId
- CSS 与 XPath(最后手段):page.locator('.nav-item.active')、locator('xpath=...')
- 过滤与链式:filter({ hasText })、filter({ has })、nth、first
操作
支持点击(click、dblclick、右键)、文本输入(fill、pressSequentially、clear)、键盘按键(press)、下拉选择(selectOption)、复选框与单选框(check、uncheck)、悬停、聚焦、拖拽(dragTo)。
断言
可使用 toBeVisible、toBeHidden、toHaveText、toContainText、toHaveValue、toHaveURL、toHaveTitle、toBeEnabled、toBeChecked、toHaveCount、toHaveClass、toHaveAttribute 以及 not 取反。还可使用 expect.soft 进行软断言,失败时不终止测试。
页面导航与等待
支持 page.goto、goBack、reload;waitForURL、waitForSelector(可指定 state)、waitForResponse、waitForLoadState('networkidle')、waitForFunction,以及为操作指定 timeout。
网络拦截
可通过 page.route 模拟 API 响应、修改真实响应、阻止资源以加速测试、检查传出请求数据;并通过 routeFromHAR 进行 HAR 录制(update: true)与回放。
身份认证
可编写 auth.setup.ts 先登录并保存 storageState 到文件,再在配置的 projects 中通过 dependencies 依赖 setup 并复用登录状态,实现一次登录多测试复用。需将 playwright/.auth/ 加入 .gitignore。
多页面、标签与弹窗
可通过 context().newPage() 新建页面,通过 waitForEvent('popup') 处理弹窗(如 OAuth 窗口、target="_blank"),并通过 browser.newContext() 创建隔离会话。
截图与视频
支持 page.screenshot(含 fullPage、元素级截图),也可在配置的 use 中全局设置 screenshot: 'only-on-failure'、video: 'retain-on-failure'。
视觉回归测试
使用 toHaveScreenshot() 进行视觉对比,可指定基准文件名或 maxDiffPixels。通过 npx playwright test --update-snapshots 更新基准,基准存储在测试文件旁的 -snapshots/ 目录中,并建议提交到版本控制。
并行执行与分片
配置 fullyParallel 与 workers(可固定数量或百分比),可用 test.describe.configure({ mode: 'serial' }) 强制串行;通过 npx playwright test --shard=1/3 等在 CI 机器间分片。
调试
常用命令包括 --headed、--debug、codegen 录制、show-trace 打开跟踪查看器、--grep 过滤、指定文件运行;测试内可用 page.pause() 暂停并打开 Inspector。跟踪查看器可展示操作时间线、每步 DOM 快照、网络请求和控制台日志;可在配置中启用 trace: 'on-first-retry' 或手动调用 tracing.start/stop 记录。
Page Object Model
可创建页面类(如 LoginPage),将定位器与操作封装为方法,在测试中复用,提升可维护性。
CI/CD 集成
提供 GitHub Actions 工作流示例(checkout、setup-node、npm ci、npx playwright install --with-deps、运行测试、上传报告工件),以及分片矩阵示例;并提供基于 mcr.microsoft.com/playwright 镜像的 Dockerfile 示例。
常见模式
- 文件上传与下载:setInputFiles(单/多/清空)、waitForEvent('download') 与 saveAs
- iframe 处理:page.frameLocator
- 对话框处理:page.on('dialog') 或 page.once('dialog')
- 断言前等待 API:waitForResponse 后校验状态码与界面文本
- 表单验证测试:依次校验必填、格式错误与成功提交提示
限制
资料未提供 Playwright 的收费、价格、平台覆盖范围、性能数据或与其他工具的对比信息,暂未提供。