跳到主要内容

测试生成器

简介

Playwright 具备在您于浏览器中执行操作时为您生成测试的功能,这是快速开启测试工作的绝佳方式。Playwright 会分析您的页面,并找出最佳定位器,优先使用 角色、文本和测试 ID 定位器。如果生成器找到多个与定位器匹配的元素,它会优化定位器,使其具有弹性,能够唯一标识目标元素。

使用 Playwright 检查器生成测试

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

运行 Codegen

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

mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="codegen demo.playwright.dev/todomvc"

录制测试

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

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

  • 诸如点击或填充之类的操作,只需与页面进行交互即可
  • 断言操作,方法是点击工具栏中的某个图标,然后点击页面上要进行断言的元素。您可以选择:
    • 'assert visibility' 来断言某个元素可见
    • 'assert text' 来断言某个元素包含特定文本
    • 'assert value' 来断言某个元素具有特定值

录制测试

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

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

生成定位器

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

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

选择定位器

模拟

你可以使用测试生成器通过模拟来生成测试,以便针对特定的视口、设备、颜色模式生成测试,还可以模拟地理位置、语言或时区。测试生成器还可以在保留认证状态的同时生成测试。

模拟视口大小

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

mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="codegen --viewport-size='800,600' playwright.dev"
Codegen 为具有特定视口的 playwright.dev 网站生成测试代码(Java 版)

模拟设备

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

mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args='codegen --device="iPhone 13" playwright.dev'
Codegen 为模拟 iPhone 13 的 playwright.dev 网站生成测试代码(Java 版)

模拟颜色模式

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

mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="codegen --color-scheme=dark playwright.dev"
Codegen 为处于深色模式的 playwright.dev 网站生成测试代码(Java 版)

模拟地理位置、语言和时区

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

  1. 接受 cookie
  2. 在右上角,点击“定位我”按钮,查看地理位置的实际效果。
mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args='codegen --timezone="Europe/Rome" --geolocation="41.890221,12.492348" --lang="it-IT" bing.com/maps'
Codegen为必应地图测试生成代码,显示时区、地理位置为意大利罗马,语言为意大利语(Java)

保留认证状态

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

mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="codegen github.com/microsoft/playwright  --save-storage=auth.json"
登录前的GitHub页面(Java)

登录

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

登录到GitHub界面

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

加载认证状态

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

mvn exec:java -e -D exec.mainClass=com.microsoft.playwright.CLI -D exec.args="codegen --load-storage=auth.json github.com/microsoft/playwright"
已登录的 GitHub,展示在 Java 中使用加载存储

使用自定义设置进行录制

如果你想在某些非标准设置中使用代码生成(例如,使用 BrowserContext.route()),可以调用 Page.pause(),这将打开一个带有代码生成控件的单独窗口。

import com.microsoft.playwright.*;

public class Example {
public static void main(String[] args) {
try (Playwright playwright = Playwright.create()) {
BrowserType chromium = playwright.chromium();
// 确保以有头模式运行。
Browser browser = chromium.launch(new BrowserType.LaunchOptions().setHeadless(false));
// 按你喜欢的方式设置上下文。
BrowserContext context = browser.newContext(/* 传递任何选项 */);
context.route("**/*", route -> route.resume());
// 暂停页面,并手动开始录制。
Page page = context.newPage();
page.pause();
}
}
}