如何通过命令行以有头模式运行pytest-playwright脚本?
问题分析与解决方案
你的核心问题在于conftest.py的配置没有正确读取命令行参数,同时硬编码了浏览器类型,导致命令行的--headed和--browser配置完全失效。
具体问题点
- 浏览器硬编码:
browserfixture里直接写死了playwright.firefox.launch(),完全忽略了pytest.ini和命令行中指定的--browser chromium参数。 - 未关联
--headed参数:虽然定义了--headed命令行选项,但browserfixture没有读取该参数,而是直接固定headless=False,导致命令行的--headed配置无法生效(可能因playwright版本或环境差异,出现实际运行与预期不符的情况)。
修改步骤
1. 更新命令行选项定义
修改conftest.py中的pytest_addoption函数,添加--browser选项:
def pytest_addoption(parser): parser.addoption("--headed", action="store_true", default=True, help="Run browser in headed mode") parser.addoption("--browser", action="store", default="chromium", help="Choose browser: chromium, firefox, webkit")
2. 动态配置浏览器与无头模式
修改browser fixture,读取命令行参数并动态初始化浏览器:
@pytest.fixture(scope="session") def browser(playwright, request): # 获取命令行指定的浏览器类型 browser_name = request.config.getoption("--browser") # 获取是否启用有头模式的配置 is_headed = request.config.getoption("--headed") # 根据配置设置无头模式:有头模式对应headless=False,无头模式对应headless=True browser = getattr(playwright, browser_name).launch(headless=not is_headed) yield browser browser.close()
验证运行
修改完成后,使用命令行运行测试:
py -m pytest -v -s test_place_order.py --browser chromium --headed
或直接使用pytest.ini的默认配置运行:
py -m pytest -v -s test_place_order.py
此时命令行的--headed参数会正确控制浏览器的有头/无头模式,--browser参数也能切换指定的浏览器。
内容的提问来源于stack exchange,提问作者Apratim Chaudhuri
相关产品推荐
相关产品推荐

