You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过命令行以有头模式运行pytest-playwright脚本?

问题分析与解决方案

你的核心问题在于conftest.py的配置没有正确读取命令行参数,同时硬编码了浏览器类型,导致命令行的--headed和--browser配置完全失效。

具体问题点

  1. 浏览器硬编码:browser fixture里直接写死了playwright.firefox.launch(),完全忽略了pytest.ini和命令行中指定的--browser chromium参数。
  2. 未关联--headed参数:虽然定义了--headed命令行选项,但browser fixture没有读取该参数,而是直接固定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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 21:13:13