Selenium Manager及Selenium原理分析

一、Selenium Manager

1.1 简介

  • Selenium Manager为Selenium提高自动化的驱动程序和浏览器管理。

  • Selenium绑定默认使用此工具,因此无需下载,也无需在代码中添加任何内容,或进行其他操作,即可使用。

  • 官网地址:https://www.selenium.dev/documentation/selenium_manager/

1.2 为什么会出现Selenium驱动管理器

  • Selenium的使用依赖两个关键要素:浏览器及其对应的驱动。

  • 在初始阶段,用户需要手动下载并配置浏览器驱动的环境。然而,由于浏览器频繁的更新,导致驱动版本也需要跟着更新,为解决这一问题,出现了三方的驱动管理工具,例如Java的WebDriverManager、Python的webdriver-manager等。

  • 基于这个需求,Selenium官方推出了内置于4.6版本的驱动管理工具Selenium-Manager。

  • Selenium-Manager提供一种便捷的方式,可以自动检测所需浏览器的版本,并下载相应的Web驱动程序,这样用户就无需手动下载和配置Web驱动程序,Selenium会自动处理这些步骤,从而增强了代码的可复用性和维护性。这一新特性使得在不同环境中,执行自动化测试变得更加轻松和高效。

1.3 自动浏览器管理

  • Selenium Manager自动检查浏览器驱动是否安装,如果安装正确,则使用此驱动;如果不是,Selenium Manager将请求远程服务,从已有的存储中找到对应驱动下载。无论哪种情况,浏览器最终也会受到管理。

  • 总之,无需手动更新driver。

    • Chrome:基于Chrome for Testing(CFT) 从Selenium 4.11.0开始。

    • Firefox:基于公开的Firefox版本,从Selenium 4.12.0开始。

    • Edge:计划用于Selenium 4.13.0。

1.4 Selenium-Manager的下载及使用

1.4.1 下载

  1. Selenium 4.6 版本及以上会自动内置Selenium Manager。

  2. Selenium低于此版本,需要自行安装第三方依赖,以下是Python环境的依赖安装指南:

pip install selenium-manager

1.4.2 使用

from webdriver_manager.chrome import ChromeDriverManager

# 初始化 driver
server = Service(executable_path=ChromeDriverManager().install())
driver = webdriver.Chrome(service=server)

注意:安装完毕后,selenium-manager 的调用是 Selenium 自动调用的,当没有显性设置浏览器驱动路径时,Selenium 会自动调用Selenium-Manager 来下载,管理驱动。

二、Selenium原理分析

2.1 简介

  • Selenium是一个用于Web应用程序的自动化测试工具。Selenium测试能够直接在浏览器中执行,模拟真实的用户操作。

  • 支持的浏览器包括IE(7,8,9,10,11)、Mozilla Firefox,Google Chrome,Opera等。这使得Selenium成为一个强大的跨浏览器测试工具,适用于各种Web应用程序的自动化测试需求。

2.2 Selenium自动化测试的三大组成

  1. 测试脚本:客户端脚本,使用Python或Java编写,负责定义测试逻辑和交互行为。

  2. 浏览器驱动:不同浏览器需要相应的驱动程序,用于实现对浏览器的控制。这是通过Selenium提供的Web Driver来实现的。其作用就是将测试脚本的指令转化为浏览器可执行的动作。

  3. 浏览器:测试目标,即被用于执行测试的浏览器。Selenium提供了各种主流浏览器的支持,包括Chrome。

2.3 Selenium是如何实现对浏览器的自动化测试

以Python代码为例:

2.3.1 注册谷歌浏览器驱动实例对象

from selenium import webdriver
driver = webdriver.Chrome()

代码:webdriver.Chrome()会执行一个cmd命令,该命令的目的是一个ChromeDriver.exe浏览器驱动程序。

事实上,我们手动点击浏览器时,也会在后台启动这样一个程序,因为这个驱动程序是控制浏览器各种操作的关键。

2.3.2 打开浏览器

driver.get("https://www.baidu.com/")
  • selenium\webdriver\chrome\webdriver.py这个代码里存在一个父类RemoteWebDriver

  • 当调用driver.get("")方法时,便会初始化这个父类,在这个父类的初始化函数中,便存在向服务器发送post请求的方法self.start_session(capabilities,browser_profile)返回一个sessionId,用以表明当前浏览器页面的会话对象。

2.3.3 操作浏览器

  • 找到元素并进行点击操作
driver.findelement(By.Id,"asd").click()

2.3.4 浏览器操作接口地址

  • 包:selenium.webdriver.remote.remote_connection import RemoteConnection 里定义了 selenium 操作需要的接口地址。

2.3.5 如何操作这些接口来实现浏览器控制

  • 使用execute方法调用_request方法通过urilib3标准库向服务器发送对应操作请求地址,进而实现浏览器操作。

  • 至于如何将这些操作与操作的对象联系起来,则需要前面打开浏览器页面时返回sessionId来完成意义对应。

2.3.6 总结

  1. 浏览器运行的逻辑,是浏览器本身是通过浏览器驱动来操作的,厂商在开发浏览器时,会将对浏览器所有的操作接口地址封装在对应浏览器的驱动程序里。当外界需要操控浏览器时,就需要去调用这些接口。
  2. selenium自动化测试中selenium本身针对不同的浏览器,创建了不同的第三方库,这些第三方库中,根据浏览器驱动的操作接口地址,封装了selenium操作的方法,在代码中使用不同的selenium操作方法,会访问对应的驱动操作接口地址。