Playwright Python POM中conftest.py启用Trace遇NameError错误求助
问题解决:NameError: name 'chromium' is not defined 及 Trace 功能配置错误
错误原因分析
- chromium未定义:直接调用
chromium.launch()但未通过Playwright实例获取浏览器对象,导致NameError。 - Fixture逻辑冲突:依赖
pagefixture的同时手动创建浏览器/上下文,与Playwright默认的资源管理机制冲突。 - Trace时机错误:Trace的启动和停止位置不符合要求,无法正确捕获测试过程。
修正方案一:手动管理浏览器资源
替换原conftest.py代码为以下内容:
import pytest from playwright.sync_api import sync_playwright @pytest.fixture(scope="function") def set_up_tear_down(): with sync_playwright() as p: # 通过Playwright实例获取chromium并启动浏览器 browser = p.chromium.launch(headless=False) context = browser.new_context() # 在创建Page前启动Trace,开启必要的捕获选项 context.tracing.start(screenshots=True, snapshots=True, sources=True) page = context.new_page() page.set_viewport_size({"width": 1536, "height": 800}) page.goto("https://google.com") # 补充完整URL协议 yield page # 测试执行完成后停止Trace并保存 context.tracing.stop(path="trace.zip") # 清理资源 page.close() context.close() browser.close()
修正方案二:使用Playwright官方Pytest Fixture(推荐)
利用Playwright自带的page fixture简化代码,自动管理浏览器资源:
import pytest from playwright.sync_api import Page @pytest.fixture(scope="function") def set_up_tear_down(page: Page): # 通过当前Page的上下文启动Trace page.context.tracing.start(screenshots=True, snapshots=True, sources=True) page.set_viewport_size({"width": 1536, "height": 800}) page.goto("https://google.com") yield page # 测试结束后停止Trace page.context.tracing.stop(path="trace.zip")
关键修改点说明
- 获取chromium对象:必须通过
sync_playwright()实例(如p.chromium)调用浏览器启动方法。 - Trace时机:
tracing.start()需在创建Page前执行,tracing.stop()需在测试完成后(yield之后)执行,确保捕获完整测试流程。 - 完整URL:导航地址需包含协议(如
https://),避免导航失败。 - 资源管理:手动创建浏览器时需在测试结束后关闭所有资源,使用官方fixture则无需手动清理。
内容的提问来源于stack exchange,提问作者Sarah Tajima
相关产品推荐
相关产品推荐

