WebDriver驱动介绍

因为移动端的driver目前没有接触,所以主要介绍PC端driver,PC端的driver都是基于浏览器的,主要分为2种类型:

一种是真实的浏览器driver:safari、firefox、ie、chrome等

比如:safari、firefox、ie、chrome都是通过浏览器原生组件来调用浏览器的原生API,这些driver都是直接启动并通过调用浏览器的底层接口来驱动浏览器的,因此具有最真实的用户场景模拟,主要用于进行web的兼容性测试使用。

一种是伪浏览器driver:htmlunit、PhantomJS

selenium支持的伪浏览器包括htmlunit、PhantomJS;他们都不是真正的在浏览器运行、都没有GUI而是具有支持html、js 等解析能力的类浏览器程序;

这些程序不会渲染出网页的显示内容,但是支持页面元素的查找、JS的执行等;由于不进行css及GUI渲染,所以运行效率上会 比真实浏览器要快很多,主要用在功能性测试上面。

驱动

说明

Firefox Driver

包含在各语言的 selenium(WebDriver) 包里, 这也是为什么安装完 selenium 就可以直接使用 firefox 启动脚本的原因。

Chrome Driver

需要下载 chromedriver ,因为webdriver 原本是谷歌的项目,之后与selenium 合并,所以对 chrome的支持也非常好

IE Driver

需要下载 IEDriverServer。

Opera Driver

要下载operaDriver,OperaDriver 是WebDriver 厂商Opera Software 和志愿者开发了对于Opera的WebDriver 实现

HtmlUnit Driver

htmlunit是java实现的类浏览器程序,它将返回文档模拟成HTML, 从而模拟浏览器的运行, 但又非真正的去启动一款浏览器去执行脚本包含在selenium server中,无需驱动,直接实例化即可

PhantomJS Driver

PhantomJS 是一个拥有JavaScript API 的无界面WebKit , 可以被看作一个款无界面的浏览器。PhantomJS是第三方的一个独立类浏览器应用,可以支持html、js、css等执行

Appium

Appium 可以被看作移动端的Selenium ,它同样支持多平台(iOS、Android及FirefoxOS ) 的app 及移动端web 的自动化测试

下面主要介绍两种伪浏览器的简单调用方法和对比,后续会单独介绍Firefox和Ie浏览器调用的详细内容及各类问题解决方法。

HTMLunit调用

HtmlUnit 官方网站:http://htmlunit.sourceforge.net/

本文采用本地的API查看地址来测试,可参考:前面的Selenium Python浏览器调用:Firefox文章中“如何查看python selenium的API来开启地址

方法一:

#coding=utf-8
from selenium importwebdriverfrom time importctimefrom time importsleepfrom selenium.webdriver.common.desired_capabilities importDesiredCapabilitiesprintctime()
driver=webdriver.Remote(command_executor="http://127.0.0.1:5555/wd/hub",desired_capabilities=DesiredCapabilities.HTMLUNIT)
driver.get("http://127.0.0.1:4567")
driver.find_element_by_partial_link_text("selenium").click()printdriver.titleprintdriver.current_urlprintdriver.nameprintctime()
driver.close()

方法二:

#coding=utf-8
from selenium importwebdriverfrom time importctimefrom time importsleepprintctime()
driver=webdriver.Remote(
command_executor='http://127.0.0.1:5555/wd/hub',
desired_capabilities={'platform': 'ANY','browserName': 'htmlunit','version': '','javascriptEnabled': True
})
driver.get("http://127.0.0.1:4567")
driver.find_element_by_partial_link_text("selenium").click()printdriver.titleprintdriver.current_urlprintdriver.nameprintctime()
driver.close()

二者的运行结果如下图,因为测试过程无界面,所以打印时间,以及页面title和url来判断执行结果:

Wed Oct 14 17:29:22 2015
Python: package selenium
http://127.0.0.1:4567/selenium.html
htmlunit
Wed Oct 14 17:29:22 2015

运行前需要启动selenium server,启动方法如下:

1、C:\Users\admin>java -jar selenium-server-standalone-2.45.0.jar -role hub

python tkinter 嵌入浏览器 python内嵌浏览器_chrome

2、C:\Users\admin>java -jar selenium-server-standalone-2.45.0.jar node -port 5555 -hub http://127.0.0.1:4444/grid/register

python tkinter 嵌入浏览器 python内嵌浏览器_html_02

PhantomJS 调用

PhantomJS 官方网站:http://phantomjs.org/

在使PhantomJS 之前,需要先下载。PhantomJS 支持Windwos、MAC、Linux 等平台,我们可以根据自己的环境选择相应的版本进行下载,下载完成解压会得phantomjs-2.0.0-windows 目录,在bin 目录会看到phantomjs.exe 程序,将当前目录添加到系统环境变量path 下。(或直接将phantomjs.exe 丢到Python 的安装目录下,因为我们最开始已将Python 添加到了系统环境变量的path 下)。

下面就可以使用phantomjs 驱动进行测试了。

#coding=utf-8
from selenium importwebdriverfrom time importctimefrom time importsleepprintctime()
driver=webdriver.PhantomJS(executable_path="c:\\python27\\phantomjs.exe")
driver.get("http://127.0.0.1:4567")
driver.find_element_by_partial_link_text("selenium").click()printdriver.titleprintdriver.current_urlprintdriver.name
driver.get_screenshot_as_file("c:\\photo.jpg")printctime()
driver.close()

运行结果如下,另外在C盘下可以看到截取的图片,与实际操作的界面相符:

Wed Oct 14 17:29:50 2015Python: package selenium
http://127.0.0.1:4567/selenium.html
phantomjs
Wed Oct14 17:29:53 2015

浏览器对比

下面在HTMLunit、PhantomJS和Firefox中运行同一个脚本(使用上文中HTMLunit的演示脚本)

三者的时间分别为:HTMLunit:0s,PhantomJS:3s,Firefox:8s

下面对比一下各个浏览器的优缺点:

驱动类型

优点

缺点

应用

真实的浏览器驱动

真实模拟用户行为

运行效率、稳定性低

web的兼容性测试使用

HtmlUnit

运行速度快

js 引擎非主流的浏览器支持

包含少量 js 的页面测试

PhantomJS

运行速度快、 模拟行为接近真实浏览器

不能模拟特定浏览器的行为

非GUI的功能性测试

参考资料

[1],selenium webdriver的各种driver,