selenium webdriver的各种driver
2015-06-10 13:18
609 查看
selenium官方加上第三方宣布支持的驱动有很多种;除了PC端的浏览器之外,还支持iphone、android的driver;大概记录一下selenium支持的各种driver的用途与说明。
selenium可支持的PC浏览器驱动包括:
safari driver【包含在selenium server中】
ie driver
chrome driver 【第三方】
selenium可支持的伪浏览器驱动:
PhantomJS Driver【第三方】----资料里这么提过,但是没有实际操作过
HtmlUnit Driver【包含在selenium server中】 ----资料里这么提过,但是没有实际操作过
selenium可支持的移动端驱动:
Windows Phone driver 【第三方】
Selendroid -Selenium
for Android【第三方】
ios-driver 【第三方】
Appium 支持iphone、ipad、android、FirefoxOS【第三方】
上述的所有驱动不仅可以直接通过各自语言客户端来调用,还是注册到selenium grid中进行分布式的远程调用。
因为移动端的driver都没有尝试过,所以就不做说明。PC端的driver都是基于浏览器的,主要分为2种类型:
一种是真实的浏览器driver
比如:safari、ff都是以插件形式驱动浏览器本身的;ie、chrome都是通过二进制文件来驱动浏览器本身的;
这些driver都是直接启动并通过调用浏览器的底层接口来驱动浏览器的,因此具有最真实的用户场景模拟,主要用于进行web的兼容性测试使用。
一种是伪浏览器driver(没有在为浏览器中操作过,这里只提供相关资料)
selenium支持的伪浏览器包括htmlunit、PhantomJS;他们都不是真正的在浏览器、都没有GUI,而是具有支持html、js
等解析能力的类浏览器程序;这些程序不会渲染出网页的显示内容,但是支持页面元素的查找、JS的执行等;由于不进行css及GUI渲染,所以运行效率上会
比真实浏览器要快很多,主要用在功能性测试上面。
htmlunit是java实现的类浏览器程序,包含在selenium server中,无需驱动,直接实例化即可;其js的解析引擎是Rhino
PhantomJS是第三方的一个独立类浏览器应用,可以支持html、js、css等执行;其驱动是Ghost driver在1.9.3版本之后已经打包进了主程序中,因此只要下载一个主程序即可;其js的解析引擎是chrome 的V8。
PS:除上述的几种真实浏览器driver中,也可以通过不同的手段来取消浏览器的css解析、界面渲染等目的;这样既可以保证浏览器的真实兼容性、也可以提高执行效率问题;使用的手段有:autoit、pyvirtualdisplay、浏览器设置等。
几种PC端driver的效率比较:
[python] view plaincopy
得出的结果:
最快的依次是htmlunit、PhantomJS、chrome、ie、ff
但抛除伪浏览器之外,真实浏览器中chrome感觉是最快的,
selenium可支持的PC浏览器驱动包括:
safari driver【包含在selenium server中】
ie driver
chrome driver 【第三方】
selenium可支持的伪浏览器驱动:
PhantomJS Driver【第三方】----资料里这么提过,但是没有实际操作过
HtmlUnit Driver【包含在selenium server中】 ----资料里这么提过,但是没有实际操作过
selenium可支持的移动端驱动:
Windows Phone driver 【第三方】
Selendroid -Selenium
for Android【第三方】
ios-driver 【第三方】
Appium 支持iphone、ipad、android、FirefoxOS【第三方】
上述的所有驱动不仅可以直接通过各自语言客户端来调用,还是注册到selenium grid中进行分布式的远程调用。
因为移动端的driver都没有尝试过,所以就不做说明。PC端的driver都是基于浏览器的,主要分为2种类型:
一种是真实的浏览器driver
比如:safari、ff都是以插件形式驱动浏览器本身的;ie、chrome都是通过二进制文件来驱动浏览器本身的;
这些driver都是直接启动并通过调用浏览器的底层接口来驱动浏览器的,因此具有最真实的用户场景模拟,主要用于进行web的兼容性测试使用。
一种是伪浏览器driver(没有在为浏览器中操作过,这里只提供相关资料)
selenium支持的伪浏览器包括htmlunit、PhantomJS;他们都不是真正的在浏览器、都没有GUI,而是具有支持html、js
等解析能力的类浏览器程序;这些程序不会渲染出网页的显示内容,但是支持页面元素的查找、JS的执行等;由于不进行css及GUI渲染,所以运行效率上会
比真实浏览器要快很多,主要用在功能性测试上面。
htmlunit是java实现的类浏览器程序,包含在selenium server中,无需驱动,直接实例化即可;其js的解析引擎是Rhino
PhantomJS是第三方的一个独立类浏览器应用,可以支持html、js、css等执行;其驱动是Ghost driver在1.9.3版本之后已经打包进了主程序中,因此只要下载一个主程序即可;其js的解析引擎是chrome 的V8。
driver类型 | 优点 | 缺点 | 应用 |
真实浏览器driver | 真实模拟用户行为 | 效率、稳定性低 | 兼容性测试 |
HtmlUnit | 速度快 | js引擎不是主流的浏览器支持的 | 包含少量js的页面测试 |
PhantomJS | 速度中等、模拟行为接近真实 | 不能模拟不同/特定浏览器的行为 | 非GUI的功能性测试 |
几种PC端driver的效率比较:
[python] view plaincopy
from selenium import webdriver import time drivers = [ 'HtmlUnit' , 'PhantomJS' , 'Chrome' , 'FF' , 'IE' ] dervers_time = { 'HtmlUnit' : 0 , 'PhantomJS' : 0 , 'Chrome' : 0 , 'FF' : 0 , 'IE' : 0 , } times = 50 def run_with_Chrome(): common_step(webdriver.Chrome()) def run_with_FF(): common_step(webdriver.Firefox()) def run_with_IE(): common_step(webdriver.Ie()) def run_with_PhantomJS(): common_step(webdriver.PhantomJS(executable_path=r 'C:\Python27\Scripts\phantomjs.exe' )) def run_with_HtmlUnit(): driver = webdriver.Remote( "http://localhost:4444/wd/hub" , desired_capabilities=webdriver.DesiredCapabilities.HTMLUNIT) common_step(driver) def common_step(driver): driver.get( 'http://www.baidu.com' ) ele = driver.find_element_by_id( 'su' ) print ele.get_attribute( 'value' ) driver.quit() for i in range(times): print '=============Times %s============' % i for driver in drivers: start = time.time() print start eval( 'run_with_%s()' %driver) end = time.time() print end elapse_time = end-start dervers_time[driver] += elapse_time print 'elapse for %s:%s' % (driver, elapse_time) for k,v in dervers_time.items(): print 'avg elapse for %s in %s times:%s' % (k, times, v/times)
得出的结果:
最快的依次是htmlunit、PhantomJS、chrome、ie、ff
但抛除伪浏览器之外,真实浏览器中chrome感觉是最快的,
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories