当前位置: 首页 > news >正文

关于 WebDriver Manager (自动管理浏览器驱动)

它是什么?为什么需要它?
传统方式需要手动查找、下载、配置环境变量来使用浏览器驱动(如 ChromeDriver),**且浏览器自动更新后,驱动版本不匹配又会报错。**webdriver-manager 就是一个能自动帮你完成这些过程的 Python 库6。它解决了因Chrome浏览器升级,driver需要同步升级,要重新下载驱动的问题

它是如何工作的?

当你第一次在代码中调用 ChromeDriverManager().install() 时,它会:

1、检测:自动检测你系统上已安装的 Chrome 浏览器版本 (例如你的 139.0.7258.128)6。

2、下载:根据检测到的版本,自动从官方仓库(或国内镜像)下载完全匹配的 ChromeDriver6。

3、缓存与管理:将驱动下载到它的缓存目录(如 ~/.wdm/drivers/),并返回该驱动的完整路径6。

4、匹配验证:它确保下载的驱动程序版本与已安装的浏览器版本兼容,从而避免常见的版本不匹配错误15。

下次再运行时,它会先检查缓存中是否有匹配的驱动,有则直接使用,无需重新下载。

还需要手动配置环境变量吗?
不需要。webdriver-manager 在后台自动处理了路径问题。你只需要在创建浏览器实例时,使用它提供的路径即可。

如何使用?(与 Selenium 结合)
你的代码会变得非常简洁,无需手动指定驱动路径:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager# 自动下载/获取匹配的ChromeDriver路径,并创建Service对象
service = ChromeService(ChromeDriverManager().install())
# 创建浏览器实例,传入service对象 (Selenium 4 推荐写法)
driver = webdriver.Chrome(service=service)
driver.get("https://www.baidu.com")
# ... 你的自动化操作
driver.quit()

对于 Selenium 3,用法稍有不同9:

python
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManagerdriver = webdriver.Chrome(executable_path=ChromeDriverManager().install())

如何在 pytest-selenium 中使用?
pytest-selenium 插件本身提供了一个内置的 selenium fixture 来驱动浏览器。默认情况下,它可能期望手动指定驱动路径或使用系统 PATH 中的驱动。

若要让 pytest-selenium 也使用 webdriver-manager,通常需要在 pytest 的配置文件(如 conftest.py)中重写或自定义提供 driver 的 fixture。一个简单的例子:

# conftest.py
import pytest
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager@pytest.fixture(scope="session")
def chrome_driver():# 自动管理驱动并创建Serviceservice = ChromeService(ChromeDriverManager().install())driver = webdriver.Chrome(service=service)yield driverdriver.quit()@pytest.fixture
def selenium(chrome_driver):# 使用自定义的chrome_driver fixture替代默认的selenium driveryield chrome_driver# 此处可根据需要决定是否在每条测试后退出浏览器# 如果希望每次测试都用新会话但不关闭浏览器,可以注释掉 quit# chrome_driver.quit() 

从技术角度看,直接使用chrome_driver确实能工作。但关键在于pytest-selenium插件的工作原理:它默认提供了一个名为"selenium"的内置fixture,很多测试用例和第三方库都依赖这个特定的fixture名称。如果我们直接重命名,就会破坏这种约定。
用户可能还隐含地担心代码冗余和维护成本。需要向ta解释这不是重复造轮子,而是为了:1)保持与现有生态的兼容性;2)实现不同生命周期的组合(session级的驱动实例+function级的清理逻辑);3)保留未来替换浏览器类型的灵活性。
在你的测试文件中,依然直接使用 selenium fixture 即可:

def test_example(selenium):selenium.get("https://example.com")assert "Example" in selenium.title

在这里插入图片描述

http://www.dtcms.com/a/344184.html

相关文章:

  • 第二阶段Winform-4:MDI窗口,布局控件,分页
  • 3.4 缩略词抽取
  • 企业级 AI 智能体安全落地指南:从攻击面分析到纵深防御体系构建
  • FileCodeBox 文件快递柜 一键部署
  • 获取后台返回的错误码
  • 如何使用命令行将DOCX文档转换为PDF格式?
  • Linux应用软件编程---网络编程1(目的、网络协议、网络配置、UDP编程流程)
  • Matplotlib 可视化大师系列(八):综合篇 - 在一张图中组合多种图表类型
  • 2.4G和5G位图说明列表,0xff也只是1-8号信道而已
  • QT QImage 判断图像无效
  • 高通平台WIFI学习-- 基于高通基线如何替换移植英飞凌WIFI芯片代码
  • mysql编程(简单了解)
  • 【Android】include复用布局 在xml中静态添加Fragment
  • 计数组合学7.20(平面分拆与RSK算法)
  • [测试技术] 接口测试中如何高效开展幂等性测试
  • pthon实现bilibili缓存视频音频分离
  • Redis内存碎片深度解析:成因、检测与治理实战指南
  • K8s存储类(StorageClass)设计与Ceph集成实战
  • 为什么应用会突然耗尽所有数据库连接
  • 智慧清洁时代来临:有鹿机器人重新定义城市清洁标准
  • 【数据结构】B 树——高度近似可”独木成林“的榕树——详细解说与其 C 代码实现
  • python selenium+pytest webUI自动化基础框架
  • 去中心化身份--改变格局的关键
  • 图数据库(neo4j)基础: 分类/标签 节点 关系 属性
  • 整数规划学习总结
  • 为什么给数据表加了索引,写入速度反而变慢了
  • 数据库原理及应用_数据库基础_第2章关系数据库标准语言SQL_数据查询(3)连接查询
  • 基于Python/django的仓库库存管理系统#基于Python的仓库管理系统#基django的J进销存管理系统
  • 力扣热题之贪心算法
  • halcon算子—gen_rectangle2和gen_rectangle1区别