Selenium+Python浏览器调用:伪浏览器
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 import webdriver from time import ctime from time import sleep from selenium.webdriver.common.desired_capabilities import DesiredCapabilities print ctime() 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() print driver.title print driver.current_url print driver.name print ctime() driver.close()
方法二:
#coding=utf-8 from selenium import webdriver from time import ctime from time import sleep print ctime() 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() print driver.title print driver.current_url print driver.name print ctime() 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
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
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 import webdriver from time import ctime from time import sleep print ctime() 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() print driver.title print driver.current_url print driver.name driver.get_screenshot_as_file("c:\\photo.jpg") print ctime() driver.close()
运行结果如下,另外在C盘下可以看到截取的图片,与实际操作的界面相符:
Wed Oct 14 17:29:50 2015 Python: package selenium http://127.0.0.1:4567/selenium.html phantomjs Wed Oct 14 17:29:53 2015
浏览器对比
下面在HTMLunit、PhantomJS和Firefox中运行同一个脚本(使用上文中HTMLunit的演示脚本)
三者的时间分别为:HTMLunit:0s,PhantomJS:3s,Firefox:8s
下面对比一下各个浏览器的优缺点:
驱动类型 | 优点 | 缺点 | 应用 |
真实的浏览器驱动 | 真实模拟用户行为 | 运行效率、稳定性低 | web的兼容性测试使用 |
HtmlUnit | 运行速度快 | js 引擎非主流的浏览器支持 | 包含少量 js 的页面测试 |
PhantomJS | 运行速度快、 模拟行为接近真实浏览器 | 不能模拟特定浏览器的行为 | 非GUI的功能性测试 |
参考资料
[1],selenium webdriver的各种driver,