跳到主要内容

测试生成器

简介

Playwright 可以根据您在浏览器中执行的操作为您生成测试,是快速入门测试的绝佳方式。Playwright 会查看您的页面并找出最佳定位器,优先考虑 角色、文本和测试 ID 定位器。如果生成器找到多个与定位器匹配的元素,它会改进定位器以使其具有弹性,以便唯一地识别目标元素。

使用 Playwright Inspector 生成测试

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

运行 Codegen

使用 codegen 命令运行测试生成器,后跟要为其生成测试的网站的 URL。URL 是可选的,您可以始终在没有 URL 的情况下运行命令,然后直接将 URL 添加到浏览器窗口中。

pwsh bin/Debug/netX/playwright.ps1 codegen demo.playwright.dev/todomvc

录制测试

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

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

  • 只需与页面交互即可执行诸如单击或填写之类的操作
  • 通过单击工具栏中的一个图标,然后单击页面上的一个元素来断言以断言。您可以选择
    • '断言可见性' 以断言元素可见
    • '断言文本' 以断言元素包含特定文本
    • '断言值' 以断言元素具有特定值

recording a test

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

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

生成定位器

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

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

picking a locator

模拟

您可以使用测试生成器使用模拟来生成测试,以便为特定视口、设备、颜色方案生成测试,以及模拟地理位置、语言或时区。测试生成器还可以在保留身份验证状态的同时生成测试。

模拟视口大小

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

pwsh bin/Debug/netX/playwright.ps1 codegen --viewport-size=800,600 playwright.dev
Codegen generating code for tests for playwright.dev website with a specific viewport dotnet

模拟设备

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

pwsh bin/Debug/netX/playwright.ps1 codegen --device="iPhone 13" playwright.dev
Codegen generating code for tests for playwright.dev website emulated for iPhone 13 csharp

模拟颜色方案

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

pwsh bin/Debug/netX/playwright.ps1 codegen --color-scheme=dark playwright.dev
Codegen generating code for tests for playwright.dev website in dark mode csharp

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

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

  1. 接受 cookie
  2. 在右上角,单击定位我按钮以查看地理位置的实际效果。
pwsh bin/Debug/netX/playwright.ps1 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 csharp

保留身份验证状态

使用 --save-storage 运行 codegen 以在会话结束时保存 cookielocalStorage。这对于单独记录身份验证步骤并在以后记录更多测试时重用它很有用。

pwsh bin/Debug/netX/playwright.ps1 codegen github.com/microsoft/playwright --save-storage=auth.json
github page before logging in csharp

登录

执行身份验证并关闭浏览器后,auth.json 将包含您可以在测试中重用的存储状态。

login to GitHub screen

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

加载身份验证状态

使用 --load-storage 运行以使用来自 auth.json 的先前加载的存储。这样,所有 cookielocalStorage 将被恢复,从而使大多数 Web 应用程序进入身份验证状态,而无需再次登录。这意味着您可以从已登录状态继续生成测试。

pwsh bin/Debug/netX/playwright.ps1 codegen --load-storage=auth.json github.com/microsoft/playwright
github signed in showing use of load storage scharp

使用自定义设置录制

如果您想在某些非标准设置中使用 codegen(例如,使用 BrowserContext.RouteAsync()),可以调用 Page.PauseAsync(),它将打开一个包含 codegen 控件的单独窗口。

using Microsoft.Playwright;

using var playwright = await Playwright.CreateAsync();
var chromium = playwright.Chromium;
// Make sure to run headed.
var browser = await chromium.LaunchAsync(new() { Headless = false });

// Setup context however you like.
var context = await browser.NewContextAsync(); // Pass any options
await context.RouteAsync("**/*", route => route.ContinueAsync());

// Pause the page, and start recording manually.
var page = await context.NewPageAsync();
await page.PauseAsync();