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

在调试模式下运行
设置PWDEBUG
环境变量以在调试模式下运行您的Playwright测试。这将配置Playwright进行调试并打开检查器。当设置PWDEBUG=1
时,会配置一些额外有用的默认值:
- 浏览器以有头(headed)模式启动
- 默认超时时间设置为0(=无超时)
- Bash
- PowerShell
- 批量处理
PWDEBUG=1 pytest -s
$env:PWDEBUG=1
pytest -s
set PWDEBUG=1
pytest -s
逐步执行您的测试
您可以使用检查器顶部的工具栏来播放、暂停或逐步执行测试中的每个操作。您可以看到测试代码中突出显示的当前操作,以及浏览器窗口中突出显示的匹配元素。

从特定断点运行测试
为了加快调试过程,您可以在测试中添加page.pause()方法。这样您就不必逐步执行测试的每个操作来达到想要调试的位置。
- Sync
- 异步
page.pause()
await page.pause()
一旦添加了page.pause()
调用,请在调试模式下运行测试。点击检查器中的"Resume"按钮将运行测试,并仅在遇到page.pause()
时暂停。

实时编辑定位器
在调试模式下运行时,您可以实时编辑定位器。在"Pick Locator"按钮旁边有一个字段显示测试暂停处的定位器。您可以直接在Pick Locator字段中编辑此定位器,匹配的元素将在浏览器窗口中高亮显示。

选择定位器
调试时,您可能需要选择一个更可靠的定位器。您可以通过点击选择定位器按钮并将鼠标悬停在浏览器窗口中的任何元素上来实现。当悬停在元素上时,您会看到下方高亮显示的定位该元素所需的代码。点击浏览器中的元素会将定位器添加到字段中,然后您可以调整它或将其复制到代码中。

Playwright 会分析您的页面并确定最佳定位器,优先考虑角色、文本和测试ID定位器。如果Playwright发现多个元素匹配定位器,它将优化定位器以提高其稳定性并唯一标识目标元素,因此您无需担心因定位器问题导致测试失败。
可操作性日志
当Playwright在点击操作上暂停时,它已经执行了可以在日志中找到的可操作性检查。这可以帮助您理解测试期间发生了什么,以及Playwright做了什么或尝试做什么。日志会告诉您元素是否可见、启用且稳定,定位器是否解析为元素,滚动到视图中等等。如果无法达到可操作性,它将显示该操作为待处理。

追踪查看器
Playwright Trace Viewer 是一个GUI工具,可让您浏览测试中记录的Playwright跟踪记录。您可以在左侧来回查看每个操作,并直观地看到操作期间发生的情况。在屏幕中央,您可以看到该操作的DOM快照。在右侧,您可以看到操作详细信息,例如时间、参数、返回值和日志。您还可以查看控制台消息、网络请求和源代码。
要了解更多关于如何记录追踪记录和使用追踪查看器的信息,请查看Trace Viewer指南。
浏览器开发者工具
在调试模式下运行PWDEBUG=console
时,开发者工具控制台中会有一个playwright
对象可用。开发者工具可以帮助您:
- 检查DOM树并查找元素选择器
- 查看控制台日志在执行期间(或学习如何通过API读取日志)
- 检查网络活动和其他开发者工具功能
这也会将Playwright的默认超时时间设置为0(即无超时)。

要使用浏览器开发者工具调试测试,首先在测试中设置一个断点,使用page.pause()方法暂停执行。
- Sync
- 异步
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.$$(选择器)
与playwright.$
相同,但返回所有匹配的元素。
playwright.$$('li >> text=John')
[<li>, <li>, <li>, <li>]
playwright.inspect(selector)
在元素面板中显示元素。
playwright.inspect('text=Log in')
playwright.locator(选择器)
创建一个定位器并查询匹配的元素,例如:
playwright.locator('.auth-form', { hasText: 'Log in' });
Locator ()
- element: button
- elements: [button]
playwright.selector(元素)
为给定元素生成选择器。例如,在元素面板中选择一个元素并传递$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检查器将阻止Playwright脚本继续执行,并会重置预先配置的用户代理和设备模拟。
有界面模式
Playwright 默认以无头模式运行浏览器。要更改此行为,请使用 headless: false
作为启动选项。
你也可以使用slow_mo选项来减慢执行速度(每个操作延迟N毫秒),方便在调试时逐步跟踪。
- Sync
- 异步
# Chromium, Firefox, or WebKit
chromium.launch(headless=False, slow_mo=100)
# Chromium, Firefox, or WebKit
await chromium.launch(headless=False, slow_mo=100)