Skip to content

介绍如何使用 codegen 录制交互并生成测试代码。

Playwright 带有在你于浏览器中执行操作时为你生成测试的能力,这是快速开始测试的绝佳方式。Playwright 会查看你的页面并找出最佳定位器,优先使用 角色、文本和测试 ID 定位器。如果生成器发现有多个元素匹配该定位器,它会改进该定位器,使其更具弹性,并能够唯一标识目标元素。

安装 VS Code 扩展,并直接从 VS Code 生成测试。该扩展可在 VS Code Marketplace 上获取。请查看我们的 VS Code 入门指南

要录制测试,请从 Testing 侧边栏点击 Record new 按钮。这将创建一个 test-1.spec.ts 文件,并打开一个浏览器窗口。

record new in vs code

在浏览器中前往你想要测试的 URL,然后开始点击页面来录制你的用户操作。

generating user actions

Playwright 会录制你的操作,并直接在 VS Code 中生成测试代码。你也可以通过选择工具栏中的某个图标,然后点击页面上的元素来生成断言。可以生成以下断言:

  • 'assert visibility':断言某个元素可见
  • 'assert text':断言某个元素包含特定文本
  • 'assert value':断言某个元素具有特定值

generating assertions

录制完成后,点击取消按钮或关闭浏览器窗口。然后你可以检查你的 test-1.spec.ts 文件,并在需要时手动改进它。

code from a generated test

要从测试中的特定位置开始录制,请将光标移动到你想要录制更多操作的位置,然后从 Testing 侧边栏点击 Record at cursor 按钮。如果你的浏览器窗口尚未打开,请先勾选 Show browser 运行测试,然后再点击 Record at cursor 按钮。

record at cursor in vs code

在浏览器窗口中开始执行你想要录制的操作。

add feed the dog to todo app

在 VS Code 的测试文件中,你会看到新生成的操作已被添加到测试中的光标位置。

code from a generated test

你可以使用测试生成器生成定位器。

  • 从 Testing 侧边栏点击 Pick locator 按钮,然后将鼠标悬停在浏览器窗口中的元素上,即可看到每个元素下方高亮显示的 定位器
  • 点击你需要的元素,它现在会显示在 VS Code 的 Pick locator 框中。
  • 按键盘上的 Enter 将定位器复制到剪贴板,然后粘贴到代码中的任意位置。或者如果想取消,请按 Escape

Pick locators in VS code

运行 codegen 命令时,将打开两个窗口:一个是浏览器窗口,你可以在其中与要测试的网站交互;另一个是 Playwright Inspector 窗口,你可以在其中录制测试,然后将它们复制到编辑器中。

使用 codegen 命令运行测试生成器,后面跟上你想要为其生成测试的网站 URL。URL 是可选的,你始终可以不带 URL 运行该命令,然后直接在浏览器窗口中添加 URL。

Terminal window
npx playwright codegen demo.playwright.dev/todomvc

运行 codegen 命令,并在浏览器窗口中执行操作。Playwright 将为用户交互生成代码,你可以在 Playwright Inspector 窗口中看到这些代码。完成测试录制后,停止录制并按复制按钮,将生成的测试复制到编辑器中。

使用测试生成器,你可以录制:

  • 通过简单地与页面交互来录制点击或填写等操作
  • 通过点击工具栏中的某个图标,然后点击页面上的元素来生成断言。你可以选择:
    • 'assert visibility':断言某个元素可见
    • 'assert text':断言某个元素包含特定文本
    • 'assert value':断言某个元素具有特定值

Recording a test

当你完成与页面的交互后,按录制按钮停止录制,并使用复制按钮将生成的代码复制到编辑器中。

使用清除按钮可以清除代码,以便重新开始录制。完成后,关闭 Playwright Inspector 窗口或停止终端命令。

你可以使用测试生成器生成 定位器

  • 'Record' 按钮停止录制,随后会出现 'Pick Locator' 按钮。
  • 点击 'Pick Locator' 按钮,然后将鼠标悬停在浏览器窗口中的元素上,即可看到每个元素下方高亮显示的定位器。
  • 要选择定位器,请点击你想要定位的元素,该定位器的代码将出现在 Pick Locator 按钮旁边的字段中。
  • 然后你可以在该字段中编辑定位器以进行微调,或者使用复制按钮复制它并粘贴到你的代码中。

picking a locator

你可以使用测试生成器通过模拟来生成测试,从而为特定视口、设备、配色方案生成测试,也可以模拟地理位置、语言或时区。测试生成器还可以在保留已认证状态的同时生成测试。

Playwright 打开的浏览器窗口会将其视口设置为特定的宽度和高度,并且不是响应式的,因为测试需要在相同条件下运行。使用 --viewport 选项可以用不同的视口大小生成测试。

Terminal window
npx playwright codegen --viewport-size="800,600" playwright.dev

Codegen generating code for tests for playwright.dev website with a specific viewport js

使用 --device 选项在模拟移动设备时录制脚本和测试,该选项会设置视口大小和用户代理等内容。

Terminal window
npx playwright codegen --device="iPhone 13" playwright.dev

Codegen generating code for tests for playwright.dev website emulated for iPhone 13 js

使用 --color-scheme 选项在模拟配色方案时录制脚本和测试。

Terminal window
npx playwright codegen --color-scheme=dark playwright.dev

Codegen generating code for tests for playwright.dev website in dark mode js

使用 --timezone--geolocation--lang 选项,在模拟时区、语言和位置时录制脚本和测试。页面打开后:

  1. 接受 cookies
  2. 在右上角,点击 locate me 按钮查看地理位置效果。
Terminal window
npx playwright codegen --timezone="Europe/Rome" --geolocation="41.890221,12.492348" --lang="it-IT" bing.com/maps

Codegen generating code for tests for bing maps showing timezone, geolocation as Rome, Italy and in Italian language

使用 --save-storage 运行 codegen,以便在会话结束时保存 cookieslocalStorageIndexedDB 数据。这对于单独录制认证步骤并在稍后录制更多测试时复用它非常有用。

Terminal window
npx playwright codegen github.com/microsoft/playwright --save-storage=auth.json

github page before logging in js

执行认证并关闭浏览器后,auth.json 将包含存储状态,随后你可以在测试中复用它。

login to GitHub screen

请确保只在本地使用 auth.json,因为它包含敏感信息。将它添加到你的 .gitignore 中,或在完成测试生成后删除它。

使用 --load-storage 运行,以使用之前从 auth.json 加载的存储。这样,所有 cookieslocalStorageIndexedDB 数据都将被恢复,使大多数 Web 应用进入已认证状态,而无需再次登录。这意味着你可以从已登录状态继续生成测试。

Terminal window
npx playwright codegen --load-storage=auth.json github.com/microsoft/playwright

github signed in showing use of load storage js

使用 --user-data-dir 运行 codegen,为浏览器会话设置固定的 用户数据目录。如果你创建了自定义浏览器用户数据目录,codegen 将使用这个现有浏览器配置文件,并能够访问该配置文件中存在的任何认证状态。

Terminal window
npx playwright codegen --user-data-dir=/path/to/your/browser/data/ github.com/microsoft/playwright

如果你想在一些非标准设置中使用 codegen(例如,使用 browserContext.route()),可以调用 page.pause(),它会打开一个带有 codegen 控件的单独窗口。

const { chromium } = require('@playwright/test');
(async () => {
// 确保以有头模式运行。
const browser = await chromium.launch({ headless: false });
// 按你喜欢的方式设置 context。
const context = await browser.newContext({ /* pass any options */ });
await context.route('**/*', route => route.continue());
// 暂停页面,并手动开始录制。
const page = await context.newPage();
await page.pause();
})();
-
0:000:00