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


    1、前言

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

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

    2、简介

    webdriver-manager 库提供了自动管理不同浏览器驱动程序的方法。

    主要思想是简化不同浏览器的二进制驱动程序的管理。

    目前支持:

    ChromeDriver

    EdgeChromiumDriver

    GeckoDriver

    IEDriver

    OperaDriver

    安装:

    pip install webdriver_manager

    3、示例

    原始代码:

    1. #!/usr/bin/env python
    2. # -*- coding: utf-8 -*-
    3. from selenium import webdriver
    4. driver = webdriver.Chrome()
    5. driver.get('https://www.baidu.com/')

    运行后报错,发现此版本的 ChromeDriver 与当前浏览器版本不匹配,无法执行。

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

    1. #!/usr/bin/env python
    2. # -*- coding: utf-8 -*-
    3. from selenium import webdriver
    4. from webdriver_manager.chrome import ChromeDriverManager
    5. driver = webdriver.Chrome(executable_path=ChromeDriverManager().install())
    6. driver.get('https://www.baidu.com/')

    4、更多

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

    1、Chrome

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

    2、Chromium

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

    3、Brave

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

    4、Edge

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

    5、Firefox

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

    6、IE

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

    7、Opera

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

    8、自定义日志记录

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

    1. import logging
    2. from webdriver_manager.core.logger import set_logger
    3. logger = logging.getLogger("custom_logger")
    4. logger.setLevel(logging.DEBUG)
    5. logger.addHandler(logging.StreamHandler())
    6. logger.addHandler(logging.FileHandler("custom.log"))
    7. set_logger(logger)

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

    在这里插入图片描述

    软件测试面试小程序

    被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

    涵盖以下这些面试题板块:

    1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

    6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

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

  • 相关阅读:
    【Vue项目】通过设置全局的异常处理来统一处理后端返回的异常
    FastASR——PaddleSpeech的C++实现
    Ubuntu服务器中java -jar 后台运行Spring Boot项目
    Vue 路由 ElementUI组件库
    十大排序(总结+算法实现)
    浅谈系统架构设计-从架构设计原理、架构设计原则、架构设计方法展开
    【C++】养很多鱼,只为观察向量的生长
    基于Flume+Kafka+Hbase+Flink+FineBI的实时综合案例(三)离线分析
    案例分析背诵点
    汽车智能计算平台公司「地平线」在 Ingress Controller 的探索和实践
  • 原文地址:https://blog.csdn.net/qq_48811377/article/details/132638744