跳至主要内容

调试测试

VS Code 调试器

我们建议使用VS Code 扩展进行调试,以获得更好的开发体验。使用 VS Code 扩展,您可以在 VS Code 中直接调试测试,查看错误消息,设置断点并逐步执行测试。

running test in debug mode

错误消息

如果您的测试失败,VS Code 将在编辑器中显示错误消息,显示预期结果、接收到的结果以及完整的调用日志。

error messaging in vs code

实时调试

您可以在 VS Code 中实时调试测试。在使用Show Browser选项运行测试后,点击 VS Code 中的任何定位器,它将在浏览器窗口中突出显示。Playwright 还会显示是否有多个匹配项。

live debugging in VS Code

您还可以编辑 VS Code 中的定位器,Playwright 将在浏览器窗口中实时显示更改。

live debugging in VS Code

选择定位器

选择一个定位器,并通过点击测试侧边栏中的选择定位器按钮将其复制到您的测试文件中。然后在浏览器中点击所需的元素,它现在将显示在 VS Code 中的选择定位器框中。按键盘上的“Enter”键将定位器复制到剪贴板,然后粘贴到代码中的任何位置。或者,如果您想取消,请按“Esc”。

Pick locators

Playwright 将查看您的页面并找出最佳定位器,优先考虑角色、文本和测试 ID 定位器。如果 Playwright 找到多个与定位器匹配的元素,它将改进定位器以使其具有弹性并唯一地识别目标元素,因此您不必担心由于定位器而导致测试失败。

在调试模式下运行

要设置断点,请点击要设置断点的行号旁边的位置,直到出现一个红点。通过右键点击要运行的测试旁边的行,在调试模式下运行测试。

setting debug test mode

浏览器窗口将打开,测试将运行并在设置断点的位置暂停。您可以逐步执行测试、暂停测试并从 VS Code 中的菜单重新运行测试。

running test in debug mode

在不同的浏览器中调试

默认情况下,调试使用 Chromium 配置文件完成。您可以通过右键点击测试侧边栏中的调试图标并从下拉菜单中点击“选择默认配置文件”选项,在不同的浏览器上调试测试。

debugging on specific profile

然后选择要用于调试测试的测试配置文件。每次在调试模式下运行测试时,它都将使用您选择的配置文件。您可以通过右键点击测试所在的行号并在菜单中选择“调试测试”来在调试模式下运行测试。

choosing a profile for debugging

要了解有关调试的更多信息,请参阅Visual Studio Code 中的调试

Playwright 检查器

Playwright 检查器是一个 GUI 工具,可帮助您调试 Playwright 测试。它允许您逐步执行测试、实时编辑定位器、选择定位器和查看可操作性日志。

Playwright Inspector

在调试模式下运行

使用--debug标志运行测试以打开检查器。这将配置 Playwright 进行调试并打开检查器。当使用--debug时,将配置其他有用的默认设置

  • 浏览器以有头模式启动
  • 默认超时设置为 0(= 无超时)

在所有浏览器上调试所有测试

要调试所有测试,请使用--debug标志运行测试命令。这将逐个运行测试,并为每个测试打开检查器和浏览器窗口。

npx playwright test --debug

在一个浏览器上调试一个测试

要在特定行上调试一个测试,请运行测试命令,后跟测试文件的名称和要调试的测试的行号,然后是--debug标志。这将在您playwright.config中配置的每个浏览器中运行单个测试并打开检查器。

npx playwright test example.spec.ts:10 --debug

在特定浏览器上调试

在 Playwright 中,您可以在playwright.config中配置项目。配置完成后,您可以使用--project标志后跟在playwright.config中配置的项目的名称,在特定浏览器或移动视口中调试测试。

npx playwright test --project=chromium --debug
npx playwright test --project="Mobile Safari" --debug
npx playwright test --project="Microsoft Edge" --debug

在一个特定浏览器上调试一个测试

要在特定浏览器上运行一个测试,请添加测试文件的名称和要调试的测试的行号,以及--project标志后跟项目的名称。

npx playwright test example.spec.ts:10 --project=webkit --debug

逐步执行测试

您可以使用检查器顶部的工具栏播放、暂停或逐步执行测试的每个操作。您可以看到测试代码中突出显示的当前操作,以及浏览器窗口中突出显示的匹配元素。

Playwright Inspector and browser

从特定断点运行测试

为了加快调试过程,您可以在测试中添加page.pause()方法。这样,您就不必逐步执行测试的每个操作才能到达要调试的位置。

await page.pause();

添加page.pause()调用后,在调试模式下运行测试。点击检查器中的“恢复”按钮将运行测试,并且只会在page.pause()处停止。

test with page.pause

实时编辑定位器

在调试模式下运行时,您可以实时编辑定位器。“选择定位器”按钮旁边有一个字段,显示测试暂停所在的定位器。您可以直接在选择定位器字段中编辑此定位器,浏览器窗口中将突出显示匹配的元素。

live editing locators

选择定位器

在调试过程中,您可能需要选择一个更具弹性的定位器。您可以通过点击选择定位器按钮并在浏览器窗口中悬停在任何元素上执行此操作。在悬停在元素上时,您将看到在下方突出显示用于查找此元素所需的代码。点击浏览器中的元素会将定位器添加到字段中,然后您可以在其中调整它或将其复制到您的代码中。

Picking locators

Playwright 将查看您的页面并找出最佳定位器,优先考虑角色、文本和测试 ID 定位器。如果 Playwright 找到多个与定位器匹配的元素,它将改进定位器以使其具有弹性并唯一地识别目标元素,因此您不必担心由于定位器而导致测试失败。

可操作性日志

Playwright 在点击操作暂停时,已经执行了可以在日志中找到的可操作性检查。这可以帮助您了解测试期间发生了什么以及 Playwright 做了什么或尝试做什么。日志会告诉您元素是否可见、已启用且稳定,定位器是否解析为元素,是否滚动到视图中,以及更多其他信息。如果无法达到可操作性,它将显示操作为挂起状态。

Actionability Logs

追踪查看器

Playwright追踪查看器是一个 GUI 工具,允许您浏览测试的录制 Playwright 追踪。您可以在左侧前后浏览每个操作,并在视觉上查看操作期间发生了什么。在屏幕中间,您可以看到操作的 DOM 快照。在右侧,您可以查看操作详细信息,例如时间、参数、返回值和日志。您还可以浏览控制台消息、网络请求和源代码。

要了解有关如何记录跟踪和使用跟踪查看器的更多信息,请查看跟踪查看器指南。

浏览器开发者工具

在使用PWDEBUG=console以调试模式运行时,开发者工具控制台中将提供一个playwright对象。开发者工具可以帮助您:

  • 检查DOM树并查找元素选择器
  • 查看执行期间的控制台日志(或了解如何通过API读取日志
  • 检查网络活动和其他开发者工具功能

这还会将Playwright的默认超时设置为0(= 无超时)。

Browser Developer Tools with Playwright object

要使用浏览器开发者工具调试测试,请首先在测试中设置断点,以使用page.pause()方法暂停执行。

await page.pause();

在测试中设置断点后,可以使用PWDEBUG=console运行测试。

PWDEBUG=console npx playwright test

Playwright启动浏览器窗口后,您可以打开开发者工具。playwright对象将在控制台面板中可用。

playwright.$(selector)

使用实际的Playwright查询引擎查询Playwright选择器,例如

playwright.$('.auth-form >> text=Log in');

<button>Log in</button>

playwright.$$(selector)

playwright.$相同,但返回所有匹配的元素。

playwright.$$('li >> text=John')

[<li>, <li>, <li>, <li>]

playwright.inspect(selector)

在“元素”面板中显示元素。

playwright.inspect('text=Log in')

playwright.locator(selector)

创建一个定位器并查询匹配的元素,例如

playwright.locator('.auth-form', { hasText: 'Log in' });

Locator ()
- element: button
- elements: [button]

playwright.selector(element)

为给定元素生成选择器。例如,在“元素”面板中选择一个元素并传递$0

playwright.selector($0)

"div[id="glow-ingress-block"] >> text=/.*Hello.*/"

详细的API日志

Playwright使用DEBUG环境变量支持详细日志记录。

DEBUG=pw:api npx playwright test
注意

对于WebKit:在执行期间启动WebKit检查器将阻止Playwright脚本进一步执行,并将重置预配置的用户代理和设备模拟。

有头模式

Playwright默认以无头模式运行浏览器。要更改此行为,请使用headless: false作为启动选项。

您还可以使用slowMo选项来减慢执行速度(每个操作延迟N毫秒),并在调试时跟踪。

// Chromium, Firefox, or WebKit
await chromium.launch({ headless: false, slowMo: 100 });