跳转到主要内容

调试测试

Playwright Inspector

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

Playwright Inspector

在调试模式下运行

设置 PWDEBUG 环境变量,以在调试模式下运行 Playwright 测试。这会配置 Playwright 进行调试并打开检查器。当设置 PWDEBUG=1 时,还会配置其他有用的默认值。

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

逐步执行您的测试

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

Playwright Inspector and browser

从特定断点运行测试

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

page.pause()

添加 page.pause() 调用后,以调试模式运行测试。单击 Inspector 中的“Resume”按钮将运行测试,并且只在 page.pause() 处停止。

test with page.pause

实时编辑定位器

在调试模式下运行测试时,你可以实时编辑定位器(locators)。在“Pick Locator”按钮旁边有一个字段,显示了测试当前暂停时所使用的 定位器。你可以直接在 Pick Locator 字段中编辑该定位器,匹配的元素会在浏览器窗口中高亮显示。

live editing locators

选择定位器

在调试期间,您可能需要选择一个更可靠的定位器。 您可以通过单击“拾取定位器”按钮并在浏览器窗口中的任何元素上悬停来实现此目的。 悬停在元素上时,您将看到定位此元素所需的代码在下方高亮显示。 单击浏览器中的元素会将定位器添加到字段中,然后您可以对其进行调整或将其复制到代码中。

Picking locators

Playwright 会检查你的页面并计算出最佳定位器,优先使用 role(角色)、text(文本)和 test id(测试 ID)定位器。如果 Playwright 发现多个元素匹配该定位器,它会优化定位器以使其更具韧性并能唯一识别目标元素,因此你无需担心因定位器问题导致测试失败。

可操作性日志

当 Playwright 在点击操作处暂停时,它已经执行了可以在日志中查看的 可操作性检查(actionability checks)。这有助于你了解测试期间发生了什么,以及 Playwright 做了什么或尝试做什么。日志会告诉你元素是否可见、已启用且稳定,定位器是否解析到了元素,是否滚动到了视图中等等。如果无法满足可操作性要求,它会将操作显示为“pending”(挂起)。

Actionability Logs

跟踪查看器

Playwright Trace Viewer(追踪查看器) 是一个图形化工具,允许你查看录制的测试追踪记录。你可以在左侧前后切换每个操作,直观地观察操作期间发生的情况。屏幕中间显示了该操作的 DOM 快照。右侧显示了操作详情,例如时间、参数、返回值和日志。你还可以查看控制台消息、网络请求和源代码。

要了解有关如何录制追踪和使用 Trace Viewer 的更多信息,请查看 Trace Viewer 指南。

浏览器开发者工具

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

  • 检查 DOM 树并查找元素选择器
  • 查看控制台日志(或了解如何 通过 API 读取日志
  • 检查网络活动和其他开发者工具功能
Browser Developer Tools with Playwright object

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

page.pause()

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

PWDEBUG=console pytest -s

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 pytest -s
注意

对于 WebKit:在执行期间启动 WebKit Inspector 将阻止 Playwright 脚本继续执行,并重置预配置的用户代理和设备仿真。

有头模式

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

你也可以使用 slow_mo 选项来减慢执行速度(每个操作延迟 N 毫秒),以便在调试时观察过程。

# Chromium, Firefox, or WebKit
chromium.launch(headless=False, slow_mo=100)