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

使用webdriver-manager解决浏览器与驱动不匹配所带来自动化无法执行的问题

在我们使用 Selenium 进行 UI 自动化测试时,常常会因为浏览器驱动与浏览器版本不匹配,而导致自动化测试无法执行,需要手动去下载对应的驱动版本,并替换原有的驱动,可能还会遇到跨操作系统进行测试的时候,以及浏览器自动升级后,也会导致与驱动不匹配的问题。

为了解决这个问题,可以使用 webdriver-manager,它可以帮助我们自动识别当前运行环境下的系统信息以及对应浏览器信息,并自动下载对应浏览器驱动。

简介

webdriver-manager 库提供了自动管理不同浏览器驱动程序的方法。
主要思想是简化不同浏览器的二进制驱动程序的管理。

目前支持:

ChromeDriver

EdgeChromiumDriver

GeckoDriver

IEDriver

OperaDriver

安装:

pip install webdriver_manager

示例

原始代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公众号:咖啡加剁椒from selenium import webdriverdriver = webdriver.Chrome()
driver.get('https://www.baidu.com/')

运行后报错,发现此版本的 ChromeDriver 与当前浏览器版本不匹配,无法执行。
更新代码(导入webdriver-manager,运行脚本,webdriver-manager 将检查当前使用的浏览器版本,并自动下载/更新匹配的浏览器驱动程序,这样将始终保持浏览器版本与驱动程序是互相匹配的。)
 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公众号:咖啡加剁椒from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManagerdriver = webdriver.Chrome(executable_path=ChromeDriverManager().install())
driver.get('https://www.baidu.com/')

更多

作者在示例中使用的是 Selenium 3,webdriver-manager 也支持 Selenium 4 的。

1、Chrome

# selenium 3
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManagerdriver = webdriver.Chrome(ChromeDriverManager().install())
# selenium 4
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManagerdriver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))

2、Chromium

# selenium 3
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.core.utils import ChromeTypedriver = webdriver.Chrome(ChromeDriverManager(chrome_type=ChromeType.CHROMIUM).install())
# selenium 4
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromiumService
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.core.utils import ChromeTypedriver = webdriver.Chrome(service=ChromiumService(ChromeDriverManager(chrome_type=ChromeType.CHROMIUM).install()))

3、Brave

# selenium 3
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.core.utils import ChromeTypedriver = webdriver.Chrome(ChromeDriverManager(chrome_type=ChromeType.BRAVE).install())
# selenium 4
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as BraveService
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.core.utils import ChromeTypedriver = webdriver.Chrome(service=BraveService(ChromeDriverManager(chrome_type=ChromeType.BRAVE).install()))

4、Edge

# selenium 3
from selenium import webdriver
from webdriver_manager.microsoft import EdgeChromiumDriverManagerdriver = webdriver.Edge(EdgeChromiumDriverManager().install())
# selenium 4
from selenium import webdriver
from selenium.webdriver.edge.service import Service as EdgeService
from webdriver_manager.microsoft import EdgeChromiumDriverManagerdriver = webdriver.Edge(service=EdgeService(EdgeChromiumDriverManager().install()))

5、Firefox

# selenium 3
from selenium import webdriver
from webdriver_manager.firefox import GeckoDriverManagerdriver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
# selenium 4
from selenium import webdriver
from selenium.webdriver.firefox.service import Service as FirefoxService
from webdriver_manager.firefox import GeckoDriverManagerdriver = webdriver.Firefox(service=FirefoxService(GeckoDriverManager().install()))

6、IE

# selenium 3
from selenium import webdriver
from webdriver_manager.microsoft import IEDriverManagerdriver = webdriver.Ie(IEDriverManager().install())
# selenium 4
from selenium import webdriver
from selenium.webdriver.ie.service import Service as IEService
from webdriver_manager.microsoft import IEDriverManagerdriver = webdriver.Ie(service=IEService(IEDriverManager().install()))

7、Opera

# selenium 3
from selenium import webdriver
from selenium.webdriver.chrome import service
from webdriver_manager.opera import OperaDriverManagerwebdriver_service = service.Service(OperaDriverManager().install())
webdriver_service.start()driver = webdriver.Remote(webdriver_service.service_url, webdriver.DesiredCapabilities.OPERA)
# selenium 4
from selenium import webdriver
from selenium.webdriver.chrome import service
from webdriver_manager.opera import OperaDriverManagerwebdriver_service = service.Service(OperaDriverManager().install())
webdriver_service.start()options = webdriver.ChromeOptions()
options.add_experimental_option('w3c', True)driver = webdriver.Remote(webdriver_service.service_url, options=options)

8、自定义日志记录

如果需要使用自定义日志记录,可以创建一个记录器并使用 set_logger() 进行设置。

import logging
from webdriver_manager.core.logger import set_loggerlogger = logging.getLogger("custom_logger")
logger.setLevel(logging.DEBUG)
logger.addHandler(logging.StreamHandler())
logger.addHandler(logging.FileHandler("custom.log"))set_logger(logger)

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关文章:

  • 劫持最新版 QQNT / QQ / TIM 客户端 ClientKeys
  • 第十章 创建Callout Library - 使用 B 链接类型传递短计数字符串
  • MySQL的事务隔离级别
  • LeetCode 394:字符串解码
  • latexshop 使用bug:xxx has a comma at the end
  • 子网掩码与IP段计算
  • java企业网站系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • PAT 乙级 1042 字符统计
  • 无需手动搜索!轻松创建IntelliJ IDEA快捷方式的Linux教程
  • Rosalind 035 Creating a Distance Matrix
  • 【科研】[3.番外篇] 常见基础科研词汇的介绍!非常基础的一期,大家选择观看哟~
  • 百度沧海文件存储CFS推出新一代Namespace架构
  • 【SpringCloud笔记】(11)消息驱动之Stream
  • 微信小程序面试题
  • 【年度征文邀请,老题目新解法,描述我的一些编程心得】2023-12-30
  • 【译】JS基础算法脚本:字符串结尾
  • JS 中的深拷贝与浅拷贝
  • 2017 前端面试准备 - 收藏集 - 掘金
  • JavaScript实现分页效果
  • MQ框架的比较
  • Selenium实战教程系列(二)---元素定位
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • Vue实战(四)登录/注册页的实现
  • 对象管理器(defineProperty)学习笔记
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 回顾2016
  • 浅谈web中前端模板引擎的使用
  • 软件开发学习的5大技巧,你知道吗?
  • 使用putty远程连接linux
  • 微信支付JSAPI,实测!终极方案
  •  一套莫尔斯电报听写、翻译系统
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 整理一些计算机基础知识!
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (C++20) consteval立即函数
  • (八)c52学习之旅-中断实验
  • (三十五)大数据实战——Superset可视化平台搭建
  • (转)人的集合论——移山之道
  • .NET CF命令行调试器MDbg入门(一)
  • .Net6 Api Swagger配置
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • .NET中使用Protobuffer 实现序列化和反序列化
  • .net专家(高海东的专栏)
  • .Net转前端开发-启航篇,如何定制博客园主题
  • /etc/sudoers (root权限管理)
  • @Autowired自动装配
  • @Transactional类内部访问失效原因详解
  • [BZOJ4016][FJOI2014]最短路径树问题
  • [C语言]一维数组二维数组的大小
  • [Docker]十一.Docker Swarm集群raft算法,Docker Swarm Web管理工具
  • [hdu 2826] The troubles of lmy [简单计算几何 - 相似]
  • [HEOI2013]ALO
  • [HXPCTF 2021]includer‘s revenge
  • [LeeCode]—Wildcard Matching 通配符匹配问题