调试测试
Playwright Inspector
Playwright Inspector 是一个 GUI 工具,可帮助您调试 Playwright 测试。它允许您逐步执行测试、实时编辑定位器、选择定位器和查看可操作性日志。
在调试模式下运行
设置 PWDEBUG 环境变量,以在调试模式下运行 Playwright 测试。这会配置 Playwright 进行调试并打开检查器。当设置 PWDEBUG=1 时,还会配置其他有用的默认值。
- 浏览器以有头模式启动
- 默认超时设置为 0 (= 无超时)
- Bash
- PowerShell
- 批处理
PWDEBUG=1 pytest -s
$env:PWDEBUG=1
pytest -s
set PWDEBUG=1
pytest -s
逐步执行您的测试
您可以使用 Inspector 顶部的工具栏播放、暂停或逐步执行测试的每个操作。您可以看到当前操作在测试代码中高亮显示,匹配的元素在浏览器窗口中高亮显示。
从特定断点运行测试
为了加快调试过程,你可以在测试中添加 page.pause() 方法。这样,你就不必为了到达想要调试的位置而一步步执行测试中的每个操作。
- 同步
- 异步
page.pause()
await page.pause()
添加 page.pause() 调用后,以调试模式运行测试。单击 Inspector 中的“Resume”按钮将运行测试,并且只在 page.pause() 处停止。
实时编辑定位器
在调试模式下运行测试时,你可以实时编辑定位器(locators)。在“Pick Locator”按钮旁边有一个字段,显示了测试当前暂停时所使用的 定位器。你可以直接在 Pick Locator 字段中编辑该定位器,匹配的元素会在浏览器窗口中高亮显示。
选择定位器
在调试期间,您可能需要选择一个更可靠的定位器。 您可以通过单击“拾取定位器”按钮并在浏览器窗口中的任何元素上悬停来实现此目的。 悬停在元素上时,您将看到定位此元素所需的代码在下方高亮显示。 单击浏览器中的元素会将定位器添加到字段中,然后您可以对其进行调整或将其复制到代码中。
Playwright 会检查你的页面并计算出最佳定位器,优先使用 role(角色)、text(文本)和 test id(测试 ID)定位器。如果 Playwright 发现多个元素匹配该定位器,它会优化定位器以使其更具韧性并能唯一识别目标元素,因此你无需担心因定位器问题导致测试失败。
可操作性日志
当 Playwright 在点击操作处暂停时,它已经执行了可以在日志中查看的 可操作性检查(actionability checks)。这有助于你了解测试期间发生了什么,以及 Playwright 做了什么或尝试做什么。日志会告诉你元素是否可见、已启用且稳定,定位器是否解析到了元素,是否滚动到了视图中等等。如果无法满足可操作性要求,它会将操作显示为“pending”(挂起)。
跟踪查看器
Playwright Trace Viewer(追踪查看器) 是一个图形化工具,允许你查看录制的测试追踪记录。你可以在左侧前后切换每个操作,直观地观察操作期间发生的情况。屏幕中间显示了该操作的 DOM 快照。右侧显示了操作详情,例如时间、参数、返回值和日志。你还可以查看控制台消息、网络请求和源代码。
要了解有关如何录制追踪和使用 Trace Viewer 的更多信息,请查看 Trace Viewer 指南。
浏览器开发者工具
在以调试模式运行并设置 PWDEBUG=console 时,开发者工具控制台中会提供一个 playwright 对象。开发者工具可以帮助您
- 检查 DOM 树并查找元素选择器
- 查看控制台日志(或了解如何 通过 API 读取日志)
- 检查网络活动和其他开发者工具功能
要使用浏览器开发者工具调试测试,请先在测试中设置断点,通过 page.pause() 方法暂停执行。
- 同步
- 异步
page.pause()
await page.pause()
在测试中设置断点后,您可以使用 PWDEBUG=console 运行测试。
- Bash
- PowerShell
- 批处理
PWDEBUG=console pytest -s
$env:PWDEBUG=console
pytest -s
set 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 环境变量进行详细日志记录。
- Bash
- PowerShell
- 批处理
DEBUG=pw:api pytest -s
$env:DEBUG="pw:api"
pytest -s
set 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)
# Chromium, Firefox, or WebKit
await chromium.launch(headless=False, slow_mo=100)