(六十一)Selenium Grid2之WebDriver驱动
随笔记录方便自己和同路人查阅。
#------------------------------------------------我是可耻的分割线-------------------------------------------
WebDriver驱动
在前几篇文章中,我们对WebDriver驱动的实现进行了简单分析,到目前为止,我们所熟悉的浏览器驱动有:Firefox Driver、Chrome Driver和IEDriverServer等。除此之外,WedDriver还支持哪些平台及驱动呢?我们下面慢慢来看。
WedDriver所支持的平台/浏览器/模式如下表:
平台/浏览器/模式 |
驱动 |
说明 |
Android |
|
支持脚本在Android WebView应用的测试,一般指移动端浏览器 |
BlackBerry |
|
支持脚本在黑莓浏览器上运行 |
Firefox |
包含在Selenium安装包中 |
包含在个语言的Selenium(WebDriver)包里,这也是为什么安装完Selenium后就可以直接使用Firefox浏览器运行脚本的原因 |
Chrome |
Chromedriver.exe |
因为WebDriver原本为谷歌的项目,之后与Selenium项目合并,所以对Chrome浏览器的支持也非常好 |
IE |
IEDriverServer.exe |
需要下载驱动支持,用于驱动脚本在IE系列的浏览器下运行 |
Edge |
MicrosoftWebDriver.exe |
支持脚本在Windows10操作系统Edge浏览器下执行 |
Opera |
Operadriver.exe |
关于Opera浏览器的前世今生比较复杂,总之,现在的OperaChromiumDriver(原OperaDriver)基于ChromeDriver |
Safari |
包含在Selenium Server中 |
Safari浏览器由苹果公司开发,最早运行于苹果自家MAC平台,目前也提供Windows版本 |
HtmlUnit |
包含在Selenium Server中 |
HtmlUnit将请求返回文档模拟成HTML,从而模拟浏览器的运行,但又非真正地启动一款浏览器执行脚本 |
PhantomJS |
phantomjs.exe |
PhantomJS是一个拥有JavaScript API的无界面WebKit,和HtmlUnit类似,可以看作是一款无界面的浏览器 |
1. 支持平台
WebDriver支持Android和BlackBerry两个移动平台的浏览器测试,至于支持性如何,笔者并没有做过测试。Android目前为市场占有率第一的移动平台,对于在其上面进行自动化测试,笔者推荐Appium,Appium扩展了WebDriver的协议,支持IOS平台和Android平台上的原生应用、Web应用和混合应用等。
BlackBerry平台目前的时长占有率很小,国内时长就更少了。
2. 支持浏览器
WebDriver目前所支持的浏览器包括:Firefox、Chrome、IE、Edge、Opera、Safari。
为什么会选择上面几款浏览器进行支持呢?主要与浏览器的内核有关。
3. 支持模式
HtmlUnit和PhantomJS是两个比较特殊的模式,我们可以把它们看作是伪浏览器,在这种模式下支持html、JavaScript等得解析,但不会真正地渲染出页面。由于不进行CSS及GUI渲染,所以运行效率上要比真实的浏览器快很多,主要用在功能性测试上面。
Edge浏览器
目前Selenium2.47.0版本已经支持Edge浏览器,不过,Edge浏览器只能运行于Windows10。与IE浏览器一样,要想让测试用例在浏览器上运行,需要改浏览器的驱动,但是我们现在并不知道驱动名称和下载地址。当然,我们可以到Selenium官网上寻找答案。不过,这里介绍一种简单粗暴的方式,直接使用报错大法。
在错误信息的最后给出了Edge驱动的下载地址( http://go.microsoft.com/fwlink/?LinkId=619687),复制链接下载MicrosoftWebDriver.msi文件。双击安装,将安装目录添加到系统环境变量path下,或将安装文件夹下的MicrosoftWebDriver.exe文件复制到C:\Python3.5目录下(该目录已经添加到系统环境变量path下)。
下面就可以使用Edge浏览器运行测试脚本了。
from selenium import webdriver driver = webdriver.Edge() driver.get('http://www.baidu.com') driver.find_element_by_id('kw').send_keys('Edge') driver.find_element_by_id('su').click() driver.quit()
Opera浏览器
Opera浏览器的发展不多介绍。最近Opera浏览器采用Blink内核,需要OperaChromiumDriver驱动支持。
GitHub地址:https://github.com/operasoftware/operachromiumdirver
下载operadriver_win64.zip,解压后将得到operadriver.exe文件,同样将其放到C:\Python3.5目录下,原因同上。
from selenium import webdriver driver = webdriver.Opera() driver.get('http://www.baidu.com') driver.find_element_by_id('kw').send_keys('Edge') driver.find_element_by_id('su').click() driver.quit()
Safari浏览器
Safari为苹果公司的浏览器,最早支持MAC平台,不过,现在已经支持Windows平台。与其他浏览器有所不同,Safari浏览器没有相应的驱动文件,它的驱动被继承到了Selenium Server中,所以,需要通过Remote配置运行。
首先,在Windows命令提示符下启动Selenium Server。
java -jar selenium-server-standalone-3.141.59.jar
然后,运行脚本。
from selenium.webdriver import Remote dc = {'browserName':'safari'} driver = Remote(command_executor='http://127.0.0.1:444/wd/hub', desired_capabilities=dc ) driver.get('http://www.baidu.com') driver.find_element_by_id('kw').send_keys('Edge') driver.find_element_by_id('su').click() driver.quit()
HtmlUnit模式
HtmlUnit官方:http://htmlunit.sourceforge.net/
HtmlUnit是一款开元的Java页面分析工具,读取页面后,可以有效地使用HtmlUnit分析页面上的内容。项目可以模拟浏览器运行,被誉为Java浏览器的开源实现。这个没有界面的浏览器,其运行速度非常迅速Selenium Server中同样包含了HtmlUnit驱动。
首先,在Windows命令提示符下启动Selenium Server。
java -jar selenium-server-standalone-3.141.59.jar
然后,运行脚本。
from selenium.webdriver import Remote dc = {'browserName':'htmlunit'} driver = Remote(command_executor='http://127.0.0.1:444/wd/hub', desired_capabilities=dc ) driver.get('http://www.baidu.com') driver.find_element_by_id('kw').send_keys('Edge') driver.find_element_by_id('su').click() driver.quit()
这种模式下运行脚本并不会真正地打开浏览器,整个过程都是在后台执行的。所以,为了证明运行是成功的,或者证明脚本确实执行了,可以在适当的步骤添加截图。
PhantomJS模式
PhantomJS官方网址:http://phantomjs.org/
PhantomJS是一个拥有JavaScript API的无界面WebKit内核,与HtmlUnit类似。正如我们所知道的,WebKit是Safari和其他一些浏览器使用的布局引擎。因此PhantomJS是一个浏览器,而且是一个无界面的浏览器。这意味着渲染后的网页实际上绝不会显示。这或许有些不可思议,所以我们可以把它作为一个可编程的浏览器终端。
在使用PhantomJS之前,需要先下载它。PhantomJS支持Windows、MAC、Linux等平台,我们可以根据自己的环境选择相应的版本进行下载。
下载完成后解压得到phantomjs.exe程序,将其复制到C:\Python3.5目录下(该目录已经添加到系统环境变量path下)。
from selenium import webdriver from selenium.common.exceptions import WebDriverException from time import sleep driver = webdriver.PhantomJS() driver.get('http://www.baidu.com') try: driver.find_element_by_id('kw').send_keys('Edge') driver.find_element_by_id('su').click() sleep(1) driver.get_screenshot_as_file('d:\\baidu_ok.jpg') except WebDriverException as msg: print(msg) driver.get_screenshot_as_file('d:\\baidu_error.jog') finally: driver.quit()
通过HtmlUnit或PhantomJS进行的自动化测试运行不会真正打开一个浏览器,在我们看来,可见的东西才会觉得是真实的,这时可以在娇嫩必要的位置添加截图,另一方面,截图也可以帮助我们定位。打开。
平台/浏览器/模式 |
驱动 |
说明 |
Android |
|
支持脚本在Android WebView应用的测试,一般指移动端浏览器 |
BlackBerry |
|
支持脚本在黑莓浏览器上运行 |
Firefox |
包含在Selenium安装包中 |
包含在个语言的Selenium(WebDriver)包里,这也是为什么安装完Selenium后就可以直接使用Firefox浏览器运行脚本的原因 |
Chrome |
Chromedriver.exe |
因为WebDriver原本为谷歌的项目,之后与Selenium项目合并,所以对Chrome浏览器的支持也非常好 |
IE |
IEDriverServer.exe |
需要下载驱动支持,用于驱动脚本在IE系列的浏览器下运行 |
Edge |
MicrosoftWebDriver.exe |
支持脚本在Windows10操作系统Edge浏览器下执行 |
Opera |
Operadriver.exe |
关于Opera浏览器的前世今生比较复杂,总之,现在的OperaChromiumDriver(原OperaDriver)基于ChromeDriver |
Safari |
包含在Selenium Server中 |
Safari浏览器由苹果公司开发,最早运行于苹果自家MAC平台,目前也提供Windows版本 |
HtmlUnit |
包含在Selenium Server中 |
HtmlUnit将请求返回文档模拟成HTML,从而模拟浏览器的运行,但又非真正地启动一款浏览器执行脚本 |
PhantomJS |
phantomjs.exe |
PhantomJS是一个拥有JavaScript API的无界面WebKit,和HtmlUnit类似,可以看作是一款无界面的浏览器 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异