Selenium自动化测试实战 —— 自动侦测浏览器版本并下载对应的浏览器驱动_自动化测试浏览去驱动下载(1)

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

:return: 最新release版本号
"""
latest_api = f"{CHROME_DRIVER_BASE_URL}/LATEST_RELEASE_{browser_major_ver}"
resp = requests.get(latest_api)
latest_driver_version = resp.text.strip()

return latest_driver_version

#### 第二步,下载浏览器驱动



def download_browser_driver(latest_driver_version, browser_name):
“”"
下载浏览器驱动压缩包
:param browser_name: 浏览器名称
:param latest_driver_version: 浏览器的版本号
“”"
download_api = None
if browser_name == “Chrome”:
download_api = f"{CHROME_DRIVER_BASE_URL}/{latest_driver_version}/{CHROME_DRIVER_ZIP}"
elif browser_name == “Edge”:
download_api = f"{EDGE_DRIVER_BASE_URL}/{latest_driver_version}/{EDGE_DRIVER_ZIP}"

download_dir = os.path.join(str(BROWSER_DRIVER_DIR), os.path.basename(download_api))
# 下载,设置超时时间20s
resp = requests.get(download_api, stream=True, timeout=20)

if resp.status_code == 200:
    with open(download_dir, 'wb') as fo:
        fo.write(resp.content)
else:
    raise Exception("Download chrome driver failed") 

#### 第三步,解驱动压缩包


解压后将原压缩包删除



def unzip_driver(browser_major_ver, browser_name):
“”"
解压驱动压缩包
:param browser_name: 浏览器名称
:param browser_major_ver: 浏览器大版本号
:return: 驱动文件路径
“”"
file_path = None
driver_path = None

if browser_name == "Chrome":
    file_path = os.path.join(BROWSER_DRIVER_DIR, os.path.basename(CHROME_DRIVER_ZIP))
    driver_path = os.path.join(BROWSER_DRIVER_DIR, browser_major_ver, CHROME_DRIVER)
elif browser_name == "Edge":
    file_path = os.path.join(BROWSER_DRIVER_DIR, os.path.basename(EDGE_DRIVER_ZIP))
    driver_path = os.path.join(BROWSER_DRIVER_DIR, browser_major_ver, EDGE_DRIVER)
browser_driver_dir = os.path.join(BROWSER_DRIVER_DIR, browser_major_ver)

# 解压到指定目录
with zipfile.ZipFile(file_path, 'r') as zip_ref:
    zip_ref.extractall(browser_driver_dir)

return driver_path

def remove_driver_zip(browser_name):
“”"
删除下载的驱动压缩包
:param browser_name: 浏览器名称
“”"
file_path = None
if browser_name == “Chrome”:
file_path = os.path.join(BROWSER_DRIVER_DIR, os.path.basename(CHROME_DRIVER_ZIP))
elif browser_name == “Edge”:
file_path = os.path.join(BROWSER_DRIVER_DIR, os.path.basename(EDGE_DRIVER_ZIP))
os.remove(file_path)


#### 第四步,读写配置文件信息



def read_driver_mapping_json():
“”"
读取 mapping_json
:return: 字典格式
“”"
if os.path.exists(DRIVER_MAPPING_FILE):
with open(DRIVER_MAPPING_FILE) as fo:
try:
driver_mapping_dict = json.load(fo)
# mapping.json内容为空时,返回空字典
except json.decoder.JSONDecodeError:
driver_mapping_dict = {}
else:
raise FileNotFoundError(f"{DRIVER_MAPPING_FILE} is not found")

return driver_mapping_dict

def write_driver_mapping_json(browser_major_ver, latest_driver_version, driver_path, browser_name):
“”"
写入 mapping_json
:param browser_major_ver: 浏览器大版本号
:param latest_driver_version: 浏览器驱动版本号
:param driver_path: 驱动存放路径
:param browser_name: 浏览器名称
“”"
mapping_dict = read_driver_mapping_json()
# 版本号在dict中(浏览器名不在dict中)
if browser_major_ver in mapping_dict:

    mapping_dict[browser_major_ver][browser_name] = {
                        "driver_path": driver_path,
                        "driver_version": latest_driver_version
            }
# 大版本号不在dict中,且字典不为空
elif browser_major_ver not in mapping_dict and mapping_dict:
    mapping_dict[browser_major_ver] = {
        browser_name:
            {
                "driver_path": driver_path,
                "driver_version": latest_driver_version
            }
    }
# 字典为空
else:
    mapping_dict = {
        browser_major_ver:
            {
                browser_name:
                    {
                        "driver_path": driver_path,
                        "driver_version": latest_driver_version
                    }
            }
    }
    mapping_dict.update(mapping_dict)

with open(DRIVER_MAPPING_FILE, 'w') as fo:
    json.dump(mapping_dict, fo)

#### 综合


将以上步骤整合到automatic\_discover\_driver函数中,通过调用该函数返回浏览器驱动路径



def automatic_discover_driver(browser_path, browser_name=“Chrome”):
“”"
侦测浏览器驱动是否在mapping.json有记录,否则下载该驱动
:param browser_path: 浏览器路径
:param browser_name: 浏览器名称
“”"
browser_maj_ver = get_browser_major_version(browser_path)
# Chrome需要获取大版本号对应的latest release version
# Edge 可直接用当前浏览器版本号
if browser_name == “Chrome”:
latest_browser_ver = get_latest_browser_version(browser_maj_ver)
elif browser_name == “Edge”:
latest_browser_ver = get_browser_version(browser_path)
else:
raise Exception(f"{browser_name} is not found")

# 读取mapping.json内容
mapping_dict = read_driver_mapping_json()

# json为空 或版本号不在mapping_dict中 或浏览器名不在mapping_dict中
if not mapping_dict or \
        browser_maj_ver not in mapping_dict or \
        browser_name not in mapping_dict[browser_maj_ver]:

    # 下载浏览器驱动压缩包
    download_browser_driver(latest_browser_ver, browser_name)
    # 解压浏览器驱动压缩包,并返回驱动路径
    driver_path = unzip_driver(browser_maj_ver, browser_name)
    # 将浏览器大版本号、浏览器名、驱动路径、对应的浏览器版本号信息写入到mapping.json中
    write_driver_mapping_json(browser_maj_ver, latest_browser_ver, driver_path, browser_name)

    # 删除浏览器驱动压缩包
    remove_driver_zip(browser_name)

# 返回浏览器驱动的路径
mapping_dict = read_driver_mapping_json()
return mapping_dict[browser_maj_ver][browser_name]["driver_path"]

#### 测试


创建一个test\_search.py文件验证是否可以自动下载对应的浏览器驱动



import pytest
from time import sleep
from selenium import webdriver
from utils.driver_util import automatic_discover_driver as automatic

class TestSearch:
_CHROME_PATH = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
_EDGE_PATH = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
_browser = “Edge”

def setup(self):
    driver_path = automatic(self._EDGE_PATH, self._browser)
    if self._browser == "Chrome":
        self.driver = webdriver.Chrome(driver_path)

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

85977)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

  • 26
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值