Playwright Inspector无法随测试启动及无头模式异常问题咨询
Python Playwright:PWDEBUG=1 无法启动Inspector、headless=True仍显示浏览器UI的问题
环境信息
- Python 3.9.6
- Playwright 1.50.0
- macOS
问题描述
- 执行调试命令
PWDEBUG=1 pytest -s test_play.py时,测试能在浏览器窗口运行,但Playwright Inspector未自动启动;仅在代码中添加page.pause()时,Inspector才会打开。 - 代码中设置
headless=True启动浏览器,但浏览器UI仍会弹出。
相关代码
@pytest.fixture(scope="function") def page(): with sync_playwright() as p: browser = p.chromium.launch(headless=True) page = browser.new_page() page.goto('https://www.example.com/', wait_until="domcontentloaded") yield page page.close() browser.close() def test_run_sample(page: Page): print('RUNNING TEST') page.pause()
解决方案
问题1:PWDEBUG=1 无法触发Inspector
原因是自定义了page fixture,未使用Playwright官方提供的pytest fixture。官方的pytest-playwright插件会自动处理PWDEBUG环境变量,手动创建browser/page实例时,该变量不会被识别。
可选解决方法:
改用官方pytest fixture
删除自定义的pagefixture,直接使用插件提供的page参数:def test_run_sample(page: Page): print('RUNNING TEST') # 无需手动添加page.pause(),PWDEBUG=1会自动启动Inspector执行
PWDEBUG=1 pytest -s test_play.py即可自动唤起Inspector。在自定义fixture中手动处理PWDEBUG
若需保留自定义fixture,可通过环境变量判断是否启动调试:import os @pytest.fixture(scope="function") def page(): with sync_playwright() as p: browser = p.chromium.launch(headless=True) page = browser.new_page() page.goto('https://www.example.com/', wait_until="domcontentloaded") # 检测PWDEBUG环境变量,启用时启动Inspector if os.getenv("PWDEBUG") == "1": page.pause() yield page page.close() browser.close()
问题2:headless=True 仍显示浏览器UI
核心原因:
- 开启
PWDEBUG=1调试模式时,Playwright会强制覆盖headless参数为False,这是调试模式的默认行为,确保能看到浏览器窗口。 - 非调试模式下出现该问题,可能是参数兼容性或覆盖问题。
解决方法:
调试模式下的预期行为
调试时浏览器UI会自动打开,无需修改,调试完成后关闭PWDEBUG环境变量即可恢复无头模式。非调试模式下的修复
- 尝试使用Playwright 1.39+引入的新无头模式参数:
browser = p.chromium.launch(headless="new") - 检查是否有其他代码/环境变量覆盖了
headless设置,比如是否存在PWDEBUG、PLAYWRIGHT_HEADLESS等环境变量。
- 尝试使用Playwright 1.39+引入的新无头模式参数:
内容的提问来源于stack exchange,提问作者Testing Singh
相关产品推荐
相关产品推荐

