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

如何在Playwright Pytest自定义Browser类中添加浏览器类型CLI参数

解决pytest通过CLI参数指定浏览器执行测试的问题

问题背景

已自定义Browser类,通过CLI参数--browser_type指定浏览器,但不确定如何修改page_custom fixture来接收参数,实现用--browser_type firefox这类命令指定浏览器执行测试。现有代码如下:

主目录下的conftest.py

def pytest_addoption(parser):
    parser.addoption('--browser_type', action="store", default="chromium")

def pytest_configure(config):
    os.environ["browser_type"] = config.getoption("browser_type")

子目录下的conftest.py

@pytest.fixture(scope="class")
def page_custom():
    params = Browser.context_parameters
    if not Browser.running_chromium:
        Browser("chrome", **Browser.browser_parameters)
    context = Browser.open_new_context(**params)
    Browser.context = context
    page = context.new_page()
    Browser.page = page
    yield page
    page.close()

解决方案

不需要通过os.environ传递参数,直接在fixture中通过request对象获取CLI参数,同时调整Browser初始化逻辑适配指定浏览器类型:

步骤1:简化主conftest.py

删掉pytest_configure函数,直接在fixture中获取参数即可:

def pytest_addoption(parser):
    parser.addoption('--browser_type', action="store", default="chromium")

步骤2:修改page_custom fixture

让fixture接收request参数,获取指定的浏览器类型,然后初始化对应的Browser实例:

import pytest

@pytest.fixture(scope="class")
def page_custom(request):
    # 获取CLI传入的浏览器类型
    browser_type = request.config.getoption("--browser_type")
    params = Browser.context_parameters
    
    # 根据指定浏览器初始化Browser实例
    if browser_type in ["firefox", "chrome", "chromium"]:
        # 覆盖原有判断逻辑,直接按指定类型初始化
        Browser(browser_type, **Browser.browser_parameters)
    
    context = Browser.open_new_context(**params)
    Browser.context = context
    page = context.new_page()
    Browser.page = page
    yield page
    # 建议关闭context做完整清理,而非仅关闭page
    context.close()
    Browser.context = None
    Browser.page = None

步骤3:执行测试命令

现在可以通过CLI指定浏览器执行测试:

pytest --browser_type firefox

扩展:同时测试多个浏览器

如果需要批量测试多个浏览器,可以让CLI接受逗号分隔的浏览器列表,结合fixture参数化实现:

def pytest_addoption(parser):
    parser.addoption('--browser_type', action="store", default="chromium", help="指定浏览器,多个用逗号分隔,如chrome,firefox")

@pytest.fixture(scope="class")
def page_custom(request):
    # 拆分CLI传入的浏览器列表,作为fixture参数
    browser_list = request.config.getoption("--browser_type").split(",")
    request._fixturedef.params = browser_list
    current_browser = request.param
    
    # 初始化当前浏览器
    Browser(current_browser, **Browser.browser_parameters)
    params = Browser.context_parameters
    context = Browser.open_new_context(**params)
    page = context.new_page()
    yield page
    context.close()

执行命令即可批量测试:

pytest --browser_type chrome,firefox

内容的提问来源于stack exchange,提问作者M András

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 04:25:04