SuperAPI AI 工具集

playwright

测试与质量

查看项目

更新于 10-15 10:59

技能介绍

用途

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 的收费、价格、平台覆盖范围、性能数据或与其他工具的对比信息,暂未提供。