一、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 下载
-
Selenium 4.6 版本及以上会自动内置Selenium Manager。
-
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自动化测试的三大组成
-
测试脚本:客户端脚本,使用Python或Java编写,负责定义测试逻辑和交互行为。
-
浏览器驱动:不同浏览器需要相应的驱动程序,用于实现对浏览器的控制。这是通过Selenium提供的Web Driver来实现的。其作用就是将测试脚本的指令转化为浏览器可执行的动作。
-
浏览器:测试目标,即被用于执行测试的浏览器。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 总结
- 浏览器运行的逻辑,是浏览器本身是通过浏览器驱动来操作的,厂商在开发浏览器时,会将对浏览器所有的操作接口地址封装在对应浏览器的驱动程序里。当外界需要操控浏览器时,就需要去调用这些接口。
- selenium自动化测试中selenium本身针对不同的浏览器,创建了不同的第三方库,这些第三方库中,根据浏览器驱动的操作接口地址,封装了selenium操作的方法,在代码中使用不同的selenium操作方法,会访问对应的驱动操作接口地址。