Python 3.10出现UnboundLocalError:driver赋值前被引用求解决
解决pytest+Selenium中的UnboundLocalError问题
你的错误根源在于setup fixture的逻辑漏洞:只有当传入的browser参数是"chrome"或"firefox"时,driver变量才会被赋值。如果用户传入了不支持的浏览器值(比如拼写错误、或者没传参数导致browser为None),driver变量根本没被定义,执行到return driver时就会触发UnboundLocalError。
下面是几种修复方案:
方案1:添加默认浏览器兜底
先初始化driver变量,再根据浏览器类型赋值,最后加默认分支避免未定义情况:
import pytest from selenium import webdriver @pytest.fixture() def setup(browser): driver = None if browser == "chrome": driver = webdriver.Chrome() print("Launching chrome browser.........") elif browser == "firefox": driver = webdriver.Firefox() print("Launching firefox browser.........") else: # 不支持的浏览器默认启动Chrome driver = webdriver.Chrome() print(f"Unsupported browser: {browser}, launching default chrome browser.........") return driver def pytest_addoption(parser): parser.addoption("--browser", default="chrome", help="Specify browser: chrome or firefox") @pytest.fixture() def browser(request): return request.config.getoption("--browser")
方案2:抛出明确的异常提示
如果不想用默认浏览器,直接抛出异常告知用户不支持的浏览器类型:
@pytest.fixture() def setup(browser): if browser == "chrome": driver = webdriver.Chrome() print("Launching chrome browser.........") elif browser == "firefox": driver = webdriver.Firefox() print("Launching firefox browser.........") else: raise ValueError(f"Unsupported browser: {browser}. Only 'chrome' and 'firefox' are allowed") return driver
额外建议:给--browser参数设置默认值(如方案1所示),这样用户不指定浏览器时也能正常运行测试,避免browser为None的情况。
内容的提问来源于stack exchange,提问作者Mr.dev
相关产品推荐
相关产品推荐

