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

如何在pytest中定义Selenium Driver并实现跨类无实例访问

在Python Selenium中实现全局可访问的WebDriver

方法1:模块级全局变量

Python的模块在程序运行时是单例存在的,你可以把WebDriver定义在单独的模块中,其他模块直接导入即可使用,无需实例化类。

示例:

  1. 创建driver_manager.py模块:
from selenium import webdriver

# 声明全局driver变量
driver = None

def init_driver(browser_type="chrome"):
    global driver
    # 避免重复初始化
    if driver is None:
        if browser_type.lower() == "chrome":
            driver = webdriver.Chrome()
        elif browser_type.lower() == "firefox":
            driver = webdriver.Firefox()
        # 可扩展其他浏览器的初始化逻辑
  1. 在其他类或模块中直接导入使用:
from driver_manager import driver

class TestLogin:
    def test_login(self):
        driver.get("https://example.com/login")
        # 后续测试操作

初始化driver的时机可以放在测试框架的前置钩子中,比如pytest的setup_module或unittest的setUpClass,确保测试开始前完成driver初始化。

方法2:类的类属性(模拟静态变量)

如果更习惯用类来管理,可以将driver定义为类的类属性,通过类名直接访问:

from selenium import webdriver

class DriverHolder:
    # 类属性,模拟静态变量
    driver = None

    @classmethod
    def init_driver(cls, browser_type="chrome"):
        if cls.driver is None:
            if browser_type.lower() == "chrome":
                cls.driver = webdriver.Chrome()
            elif browser_type.lower() == "firefox":
                cls.driver = webdriver.Firefox()

# 初始化driver
DriverHolder.init_driver("chrome")

# 在其他类中访问
class TestCheckout:
    def test_checkout_flow(self):
        DriverHolder.driver.get("https://example.com/checkout")
        # 测试操作逻辑

注意事项

  • 确保driver只初始化一次,避免重复创建浏览器实例;
  • 多线程/多进程测试场景下,全局driver会导致冲突,此时需要为每个线程/进程单独创建driver实例;
  • 测试结束后务必调用driver.quit()关闭浏览器,避免资源泄漏,可放在测试框架的后置钩子中执行。

内容的提问来源于stack exchange,提问作者Arsenium

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:12:18