Selenium自动化测试:Edge与Chrome驱动版本匹配与手动配置全指南
1. 为什么需要手动配置浏览器驱动?
做自动化测试的朋友们肯定都遇到过这样的场景:明明昨天还能正常运行的Selenium脚本,今天突然报错说找不到浏览器驱动了。这种情况十有八九是因为浏览器自动更新了版本,而驱动没有及时跟上。我刚开始用Selenium的时候,这个问题困扰了我整整一周,后来才发现是Edge浏览器偷偷更新了版本。
浏览器和驱动的版本必须严格匹配,这是Selenium工作的基本要求。Chrome和Edge这类基于Chromium的浏览器,它们的驱动版本号必须与浏览器主版本号一致。比如Edge 120.0.2210.91版本,就必须使用120.x.x.x系列的msedgedriver。如果版本不匹配,轻则功能异常,重则直接报错。
Selenium 4虽然引入了Selenium Manager来自动管理驱动,但在实际使用中我发现它有几个局限:一是国内网络环境下载经常失败;二是某些企业版浏览器无法被正确识别;三是对测试环境的版本控制不够灵活。所以掌握手动配置驱动的技能还是很有必要的。
2. 确认浏览器版本的方法
2.1 Edge浏览器版本确认
Edge浏览器查看版本最简单的方法是在地址栏输入:
edge://settings/help
页面会显示类似"Microsoft Edge 版本 120.0.2210.91 (正式版本) (64 位)"的信息。这里120就是主版本号,我们需要记住这个数字。
如果你需要通过代码获取版本,可以试试这个Python方法:
import win32api
import win32con
def get_edge_version():
try:
key = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE,
r"SOFTWARE\Microsoft\Edge\BLBeacon")
version = win32api.RegQueryValueEx(key, "version")[0]
return version.split('.')[0] # 返回主版本号
except Exception as e:
print(f"获取Edge版本失败: {e}")
return None
2.2 Chrome浏览器版本确认
Chrome查看版本的地址是:
chrome://settings/help
或者直接在地址栏输入:
chrome://version/
后者会显示更详细的信息,包括完整的版本号如"120.0.6099.199"。
代码获取版本的方式与Edge类似:
def get_chrome_version():
try:
key = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE,
r"SOFTWARE\Google\Chrome\BLBeacon")
version = win32api.RegQueryValueEx(key, "version")[0]
return version.split('.')[0] # 返回主版本号
except Exception as e:
print(f"获取Chrome版本失败: {e}")
return None
3. 手动下载匹配的浏览器驱动
3.1 Edge驱动下载
Edge驱动的官方下载地址是:
https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
这里有个小技巧:页面默认显示的是最新稳定版驱动。如果你需要历史版本,可以修改URL中的版本号。比如要下载120版本的驱动,可以把URL改成:
https://msedgedriver.azureedge.net/120.0.2210.91/edgedriver_win64.zip
下载时要注意系统架构(32位或64位)。现在的电脑基本都是64位了,但如果你不确定,可以在Windows设置→系统→关于中查看系统类型。
3.2 Chrome驱动下载
Chrome驱动的官方下载比较复杂,有多个来源:
- 传统下载地址(适用于115以下版本):
https://chromedriver.storage.googleapis.com/index.html
- Chrome for Testing版本(推荐):
https://googlechromelabs.github.io/chrome-for-testing/
国内用户可能会遇到下载慢的问题,可以使用清华镜像源:
https://registry.npmmirror.com/binary.html?path=chromedriver/
下载时要注意:
- 主版本号必须与浏览器一致
- 优先选择"stable"标签的版本
- 如果找不到完全匹配的版本,选择最接近的次版本
4. 驱动路径配置的三种方式
4.1 方法一:放在Python解释器目录
这是最简单的配置方式,适合个人开发环境。首先获取Python解释器路径:
import sys
print(sys.executable)
然后把下载的驱动文件(msedgedriver.exe或chromedriver.exe)复制到该目录下。
优点是简单直接,缺点是如果使用虚拟环境,切换环境时需要重新复制。
4.2 方法二:添加到系统PATH环境变量
更规范的做法是把驱动所在目录加入系统PATH:
- 创建一个专门存放驱动的目录,比如
C:\WebDrivers - 把下载的驱动文件放入该目录
- 添加系统环境变量:
- 右键"此电脑"→属性→高级系统设置→环境变量
- 在系统变量的Path中添加
C:\WebDrivers
验证是否配置成功:
import os
print(os.getenv('PATH')) # 检查PATH是否包含驱动目录
4.3 方法三:代码中指定驱动路径(推荐)
这是最灵活的方式,特别适合团队协作和持续集成环境。示例代码如下:
Edge驱动指定:
from selenium import webdriver
from selenium.webdriver.edge.service import Service
service = Service(executable_path=r'C:\WebDrivers\msedgedriver.exe')
driver = webdriver.Edge(service=service)
Chrome驱动指定:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
service = Service(executable_path=r'C:\WebDrivers\chromedriver.exe')
driver = webdriver.Chrome(service=service)
我特别喜欢这种方式的原因是:
- 不同项目可以使用不同版本的驱动
- 配置文件可以统一管理路径
- 方便与CI/CD工具集成
5. 常见问题排查与解决
5.1 驱动版本不匹配错误
典型错误信息:
SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 114
Current browser version is 120.0.6099.199
解决方法:
- 检查浏览器版本
- 下载对应版本的驱动
- 清理浏览器缓存(有时浏览器会残留旧版本信息)
5.2 浏览器自动关闭问题
添加detach选项可以防止浏览器闪退:
options = webdriver.EdgeOptions()
options.add_experimental_option("detach", True)
driver = webdriver.Edge(options=options, service=service)
5.3 企业版浏览器特殊处理
有些企业定制的Chrome/Edge浏览器版本号可能与标准版不同。这时可以尝试:
- 使用浏览器文件属性中的版本号
- 下载相近版本的驱动测试
- 联系IT部门获取专用驱动
5.4 权限问题处理
如果遇到权限错误,可以尝试:
- 以管理员身份运行IDE/命令行
- 检查驱动文件是否有执行权限
- 关闭杀毒软件临时测试(记得测完再打开)
6. 自动化管理驱动的进阶方案
对于需要频繁切换浏览器版本的项目,手动管理驱动会很麻烦。这里分享几个进阶方案:
6.1 使用webdriver-manager
安装:
pip install webdriver-manager
使用示例:
from selenium import webdriver
from webdriver_manager.microsoft import EdgeChromiumDriverManager
driver = webdriver.Edge(EdgeChromiumDriverManager().install())
优点是自动下载匹配版本,缺点是国内下载可能较慢。
6.2 自定义驱动管理工具
我们可以自己实现一个智能驱动管理工具,主要功能包括:
- 自动检测浏览器版本
- 检查本地是否有匹配驱动
- 无匹配时自动下载
- 更新驱动缓存
核心代码结构:
class DriverManager:
def __init__(self):
self.cache_dir = os.path.expanduser("~/.webdrivers")
def get_driver_path(self, browser_type):
# 实现版本检测和驱动管理逻辑
pass
6.3 使用Docker容器
对于复杂的测试环境,可以考虑使用Docker预先配置好浏览器和驱动:
FROM selenium/standalone-chrome:120.0
# 自定义配置...
这样就能保证环境一致性,避免本地配置问题。
7. 最佳实践与经验分享
经过多个项目的实践,我总结出以下几点经验:
- 版本锁定:在测试环境中固定浏览器版本,避免自动更新带来的意外
- 驱动归档:建立公司内部的驱动归档库,方便团队共享
- 错误处理:在代码中添加完善的错误处理,提示明确的解决方案
- 日志记录:记录浏览器和驱动版本信息,方便问题排查
- 环境检查:在测试开始时自动检查环境配置
一个实用的环境检查函数示例:
def check_environment(browser_type):
try:
if browser_type == "chrome":
version = get_chrome_version()
driver_path = find_driver("chromedriver", version)
elif browser_type == "edge":
version = get_edge_version()
driver_path = find_driver("msedgedriver", version)
if not driver_path:
download_driver(browser_type, version)
driver_path = find_driver(...)
return driver_path
except Exception as e:
logging.error(f"环境检查失败: {str(e)}")
raise
最后提醒一点:无论是手动还是自动管理驱动,都要定期检查更新。浏览器安全更新很频繁,对应的驱动也需要及时跟进,才能保证自动化测试的稳定性和安全性。
更多推荐



所有评论(0)