selenium2支持*面操作(HtmlUnit和PhantomJs)

selenium2支持*面操作(HtmlUnit和PhantomJs)

selenium2支持通过各种driver(FirfoxDriver,IternetExplorerDriver,OperaDriver,ChromeDriver)驱动真实浏览器完成测试的。

其实selenium也是支持*面浏览器操作的。比如说HtmlUnit和PhantomJs。他们都不是真正的浏览器,运行时不会渲染页面显示内容,但是支持页面元素查找,js的执行等;由于不进行css和gui渲染,运行效率要比真实的浏览器要快很多。

1.htmlUnit是java实现的类浏览器程序,包含在selenium server中,无须驱动,直接实例化就行。

用法如下:
WebDriver driver = new HtmlUnitDriver();//
WebDriver driver = new HtmlUnitDriver(true);//支持js
 
2.PhantomJS 是一个基于 WebKit(WebKit是一个开源的浏览器引擎,Chrome,Safari就是用的这个浏览器引擎) 的服务器端 JavaScript API,主要应用场景是:无需浏览器的 Web 测试,页面访问自动化,屏幕捕获,网络监控
 
用法如下:
WebDriver driver = new PhantomJSDriver();
 
3.为了看以上两个*面浏览器是否适合当前项目组前端自动化,做了一些预研,结果如下:
 
行为描述  行为 HtmlUnitDriver HtmlUnitDriver(true) PhantomJSDriver FirefoxDriver
文本框input 输入文本 yes yes yes yes
按钮button 点击按钮 yes yes yes yes
超链接a 点击 yes yes  no yes
下拉列表select 选择选项 yes yes  yes yes
复选框checkbox 点击 yes yes  yes yes
Alert(显示带有一条指定消息和一个 OK 按钮的警告框) 点击 no no  no yes
Promprt(显示可提示用户进行输入的对话框) 点击 no no  no  yes
 
 最终的预研结果是不适合我们的系统,因为我们的系统中有很多Alert
 
 
4.总结HtmlUnitDriver,PhantomJS与真实浏览器驱动的优缺点比较
driver类型 优点 缺点 应用
真实浏览器driver 真实模拟用户行为 效率、稳定性低 浏览器兼容性测试
HtmlUnit 速度快 js引擎(Rhinojs)不是主流的浏览器支持的,故对js支持的不够好 包含少量js的页面测试
PhantomJS 速度中等、模拟行为接近真实 不能模拟不同/特定浏览器的行为 非GUI的功能性测试
 

总结:

如果你要测试的页面js不是很多,并且不需要做兼容性测试的话,HtmlUnitDriver无遗是最好的选择

如果你需要做兼容性测试的话,还是应该选择真实的浏览器driver(如果你想提高自动化运行速率,可以考虑用testng,selenium grid并行测试)

本文目录 [隐藏]

I. 问题

老高最近遇到一个需求,linux\centos下,使用selenium技术抓取数据。本来很简单的问题,但是由于内存限制,安装X window不现实,所以一个BT的想法诞生了,是否可以在centos命令行界面运行一个虚拟的桌面,然后使用selenium控制Firefox浏览 器完成一些操作,Firefox运行在虚拟的桌面中,一切操作都在命令行中完成。

Google之,发现了Xvfb,他可以新建一个虚拟的X窗口,再配合python的pyvirtualdisplay,简直就是神器!

II. 安装

centos下:

# 安装Xvfb和pyvirtualdisplay
yum install xorg-x11-server-Xvfb
pip install pyvirtualdisplay

安装firefox和selenium

yum install firefox
pip install selenium

III. 代码

from pyvirtualdisplay import Display
from selenium import webdriver

display = Display(visible=0, size=(800, 600))
display.start()

browser = webdriver.Firefox()
browser.get('http://www.google.com')
print browser.title
browser.quit()

display.stop()

参考网站:

http://selenium-python.readthedocs.org/en/latest/getting-started.html
http://nullege.com/codes/search/selenium.webdriver.Remote.find_elements_by_class_name
http://www.opsview.com/forum/opsview-core/how-do-i/how-do-i-install-selenium-centos-server
https://gist.github.com/textarcana/5855427
http://scraping.pro/use-headless-firefox-scraping-linux/
http://serverfault.com/questions/363827/how-can-i-run-firefox-on-centos-with-no-display
https://realpython.com/blog/python/headless-selenium-testing-with-python-and-phantomjs/
https://pypi.python.org/pypi/selenium

http://selenium.googlecode.com/git/docs/api/py/selenium/selenium.selenium.html#module-selenium.selenium

http://www.ibm.com/developerworks/cn/opensource/os-php-designptrns/
http://www.cnblogs.com/fnng/p/3230768.html
http://www.cnblogs.com/fnng/p/3157639.html
http://www.cnblogs.com/fnng/p/3157639.html

上一篇:转载:Spring学习总结


下一篇:在centos,docker中安装HeadlessChrome