
1、前言
在我们使用 Selenium 进行 UI 自动化测试时,常常会因为浏览器驱动与浏览器版本不匹配,而导致自动化测试无法执行,需要手动去下载对应的驱动版本,并替换原有的驱动,可能还会遇到跨操作系统进行测试的时候,以及浏览器自动升级后,也会导致与驱动不匹配的问题。
为了解决这个问题,可以使用 webdriver-manager,它可以帮助我们自动识别当前运行环境下的系统信息以及对应浏览器信息,并自动下载对应浏览器驱动。
2、简介
webdriver-manager 库提供了自动管理不同浏览器驱动程序的方法。
主要思想是简化不同浏览器的二进制驱动程序的管理。
目前支持:
- ChromeDriver
- EdgeChromiumDriver
- GeckoDriver
- IEDriver
- OperaDriver
安装:
pip install webdriver_manager
3、示例
原始代码:
| |
| |
| |
| |
| from selenium import webdriver |
| |
| driver = webdriver.Chrome() |
| driver.get('https://www.baidu.com/') |
运行后报错,发现此版本的 ChromeDriver 与当前浏览器版本不匹配,无法执行。
更新代码(导入webdriver-manager,运行脚本,webdriver-manager 将检查当前使用的浏览器版本,并自动下载/更新匹配的浏览器驱动程序,这样将始终保持浏览器版本与驱动程序是互相匹配的。)
| |
| |
| |
| |
| from selenium import webdriver |
| from webdriver_manager.chrome import ChromeDriverManager |
| |
| driver = webdriver.Chrome(executable_path=ChromeDriverManager().install()) |
| driver.get('https://www.baidu.com/') |
4、更多
作者在示例中使用的是 Selenium 3,webdriver-manager 也支持 Selenium 4 的。
Chrome
| |
| from selenium import webdriver |
| from webdriver_manager.chrome import ChromeDriverManager |
| |
| driver = webdriver.Chrome(ChromeDriverManager().install()) |
| |
| from selenium import webdriver |
| from selenium.webdriver.chrome.service import Service as ChromeService |
| from webdriver_manager.chrome import ChromeDriverManager |
| |
| driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install())) |
Chromium
| |
| from selenium import webdriver |
| from webdriver_manager.chrome import ChromeDriverManager |
| from webdriver_manager.core.utils import ChromeType |
| |
| driver = webdriver.Chrome(ChromeDriverManager(chrome_type=ChromeType.CHROMIUM).install()) |
| |
| 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 ChromeType |
| |
| driver = webdriver.Chrome(service=ChromiumService(ChromeDriverManager(chrome_type=ChromeType.CHROMIUM).install())) |
Brave
| |
| from selenium import webdriver |
| from webdriver_manager.chrome import ChromeDriverManager |
| from webdriver_manager.core.utils import ChromeType |
| |
| driver = webdriver.Chrome(ChromeDriverManager(chrome_type=ChromeType.BRAVE).install()) |
| |
| 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 ChromeType |
| |
| driver = webdriver.Chrome(service=BraveService(ChromeDriverManager(chrome_type=ChromeType.BRAVE).install())) |
Edge
| |
| from selenium import webdriver |
| from webdriver_manager.microsoft import EdgeChromiumDriverManager |
| |
| driver = webdriver.Edge(EdgeChromiumDriverManager().install()) |
| |
| from selenium import webdriver |
| from selenium.webdriver.edge.service import Service as EdgeService |
| from webdriver_manager.microsoft import EdgeChromiumDriverManager |
| |
| driver = webdriver.Edge(service=EdgeService(EdgeChromiumDriverManager().install())) |
Firefox
| |
| from selenium import webdriver |
| from webdriver_manager.firefox import GeckoDriverManager |
| |
| driver = webdriver.Firefox(executable_path=GeckoDriverManager().install()) |
| |
| from selenium import webdriver |
| from selenium.webdriver.firefox.service import Service as FirefoxService |
| from webdriver_manager.firefox import GeckoDriverManager |
| |
| driver = webdriver.Firefox(service=FirefoxService(GeckoDriverManager().install())) |
IE
| |
| from selenium import webdriver |
| from webdriver_manager.microsoft import IEDriverManager |
| |
| driver = webdriver.Ie(IEDriverManager().install()) |
| |
| from selenium import webdriver |
| from selenium.webdriver.ie.service import Service as IEService |
| from webdriver_manager.microsoft import IEDriverManager |
| |
| driver = webdriver.Ie(service=IEService(IEDriverManager().install())) |
Opera
| |
| from selenium import webdriver |
| from selenium.webdriver.chrome import service |
| from webdriver_manager.opera import OperaDriverManager |
| |
| webdriver_service = service.Service(OperaDriverManager().install()) |
| webdriver_service.start() |
| |
| driver = webdriver.Remote(webdriver_service.service_url, webdriver.DesiredCapabilities.OPERA) |
| |
| from selenium import webdriver |
| from selenium.webdriver.chrome import service |
| from webdriver_manager.opera import OperaDriverManager |
| |
| webdriver_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) |
自定义日志记录
如果需要使用自定义日志记录,可以创建一个记录器并使用 set_logger() 进行设置。
| import logging |
| from webdriver_manager.core.logger import set_logger |
| |
| logger = logging.getLogger("custom_logger") |
| logger.setLevel(logging.DEBUG) |
| logger.addHandler(logging.StreamHandler()) |
| logger.addHandler(logging.FileHandler("custom.log")) |
| |
| set_logger(logger) |