做过selenium自动化项目的同学应该都遇到过这样的问题:测试用例太多,运行速度过慢导致团队成员怨声载道。

于是便有了selenium grid和多线程运行selenium测试用例的方法。这些方法各有利弊这里就不一一列举了。但总的来说,如果浏览器运行的速度足够快,那么多线程并发时的用例执行速度应该是可以满足实际项目需求的。

再想象一下这样的情景:如果你手头的机器是没有gui的(这是可能的,我以前的几台centos的server根本就没有ui),如何在这样的headless的机器上运行selenium用例呢?

答案是可以用selenium自带的HtmlUnitDriver。不过可惜的是HtmlUnitDriver对js的支持不是特别完美,所以该方案可行但是不完善,不是特别适合用于真实项目。

好在现在有了phantomjs和ghostdriver,我们可以用ghostdriver来运行selenium测试用例。所有的用例都是在没有gui的浏览器里运行,运行速度可以得到极大的提升。再加上phantomjs是基于webkit的,所以ghostdriver完全可以模拟chrome和safari的行为。

在我的macbookpro上,chromedriver的表现不是特别令人满意,而我又没有安装firefox和safari driver,所以对于一般的页面(js交互不是特别多的页面),我都是用ghost driver在调试问题,快速而简便。最主要是没有真实的浏览器弹出来,不会像chromedriver那样经常意外退出造成内存泄漏,也不会像firefox那样运行缓慢。

下面简单介绍一下ghost driver 与selenium合体的过程。

背景知识

下面的内容要求你已经成功的安装好python的selenim binding。如果你有pip,直接运行 pip install selenium即可。如果被墙,请使用豆瓣源。

或者成功的安装好ruby的watir-webdriver。如果你有gem,直接运行 gem install watir-webdriver即可。如果被墙,请使用淘宝源

安装ghost driver

ghost driver现在已经跟phantomjs合体,所以安装好最新版本的phantomjs就等于安装好了ghostdriver。

这里下载对应平台的phantomjs。

  • 首先解压下载好的zip文件或tar文件(linux only);

  • windows用户将解压过后的得到的phantomjs.exe文件加入系统的PATH中。简单点说如果你使用pyhon,就把phantomjs.exe放到python的安装目录下,ruby用户放到ruby/bin目录下;

  • mac和linux用户可以把解压后得到的phantomjs建个软链到/usr/local/bin目录下。ln -s /where/is/phantomjs /usr/local/bin/phantomjs

快速开始

python用户新建itest.py文件然后敲入下面的内容

from selenium import webdriver

dr = webdriver.PhantomJS('phantomjs')
dr.get('http://baidu.info')
print dr.title
print dr.current_url
dr.quit()

watir-webdriver用户新建文件itest.rb然后敲入下面的内容

require 'watir-webdriver'

b = Watir::Browser.new :phantomjs
b.goto 'www.baidu.com' puts b.title
puts b.url b.close

讨论

  • ghostdriver尽管对js的支持是不错的,但是如果你的页面上js交互过多的话,ghostdriver是会缴械投降的;

  • 用ghostdriver+selenium的语法可以做一些不错的爬虫;

  • 用java用户请使用maven下载java的ghostdriver binding;

  • 当页面上有flash播放器时,phantom可能会萌萌哒的卡在那里一动不动;

  • ghostdriver基于phantomjs,phantomjs可以做爬虫,简单的性能测试,ui自动化测试和其他一些工作;

  • 由于没有ui,当测试发生错误的时候调试的工作量就会变大;

看不到运行的过程,心中惶恐不安怎么办

答案是截图拯救人员,截图拯救世界。

运行到关键的节点或步骤时截个图,即方便了调试又使你的测试拥有足够多的输出,一举两得何乐不为?

python代码

from selenium import webdriver

dr = webdriver.PhantomJS('phantomjs')
dr.get('http://baidu.info')
print dr.title
print dr.current_url dr.save_screenshot('./baidu.png') dr.quit()

ruby代码

require 'watir-webdriver'

b = Watir::Browser.new :phantomjs
b.goto 'www.baidu.com' puts b.title
puts b.url
b.driver.save_screenshot('./baidu.jpg') b.close

小而美的ghost driver的更多相关文章

  1. selenium webdriver的各种driver

    selenium官方加上第三方宣布支持的驱动有很多种:除了PC端的浏览器之外,还支持iphone.Android的driver:大概记录一下selenium支持的各种driver的用途与说明. sel ...

  2. selenium帮助手册以及 webdriver的各种driver

    帮助手册 http://selenium-python.readthedocs.io/locating-elements.html 转载于:http://blog.csdn.net/five3/art ...

  3. Selenium Web 自动化 - 项目实战(一)

    Selenium Web 自动化 - 测试框架(一) 2016-08-05 目录 1 框架结构雏形2 把Java项目转变成Maven项目3 加入TestNG配置文件4 Eclipse编码修改5 编写代 ...

  4. 基于Python, Selenium, Phantomjs无头浏览器访问页面

    引言: 在自动化测试以及爬虫领域,无头浏览器的应用场景非常广泛,本文将梳理其中的若干概念和思路,并基于代码示例其中的若干使用技巧. 1. 无头浏览器 通常大家在在打开网页的工具就是浏览器,通过界面上输 ...

  5. Java. How to use headless browsers for crawling web and scraping data from website.--转

    https://www.linkedin.com/pulse/java-how-use-headless-browsers-crawling-web-scraping-data-taluyev/ Di ...

  6. 深入linux kernel内核配置选项

    ============================================================================== 深入linux kernel内核配置选项 ...

  7. T3500通过PXE克隆报“Unable to Control A20 Line XMS Driver not installed”

    问题:使用deepin_ghost1.6中的PXE网络GHOST时提示如下错误信息: ERROR:Unable to control A20 line!XMS Driver not installed ...

  8. 抛弃vboot不格盘用grub4dos+firadisk安装Ghost版XP到VHD,轻松RAMOS!

    http://bbs.wuyou.net/forum.php?mod=viewthread&tid=363198&extra=抛弃vboot不格盘用grub4dos+firadisk安 ...

  9. MongoDB Java Driver操作指南

    MongoDB为Java提供了非常丰富的API操作,相比关系型数据库,这种NoSQL本身的数据也有点面向对象的意思,所以对于Java来说,Mongo的数据结构更加友好. MongoDB在今年做了一次重 ...

随机推荐

  1. Ajax:HyperText/URI, HTML, Javascript, frame, frameset, DHTML/DOM, iframe, XMLHttp, XMLHttpRequest

    本文内容 Ajax 诞生 促使 Ajax 产生的 Web 技术演化 真正 Ajax Ajax 与 Web 2.0 Ajax 背后的技术 2008 年毕业,2011 年看了<Ajax 高级程序设计 ...

  2. 第八周(2) Word邮件合并1

    源自:http://www.sxszjzx.com/~c20/12-2/office-gj/files/8-2/8-2.html 第八周(2) Word邮件合并1 教学时间 2013-4-16 教学课 ...

  3. 利用exif.js解决ios或Android手机上传竖拍照片旋转90度问题

    html5+canvas进行移动端手机照片上传时,发现ios手机上传竖拍照片会逆时针旋转90度,横拍照片无此问题:Android手机没这个问题. 因此解决这个问题的思路是:获取到照片拍摄的方向角,对非 ...

  4. 1064: 不明飞行物(ufo)

    #include<iostream> #include<string> using namespace std; int main(){ string a,b ; long m ...

  5. nyoj 119士兵杀敌(三)(线段树区间最值查询,RMQ算法)

    题目119 题目信息 执行结果 本题排行 讨论区 士兵杀敌(三) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描写叙述 南将军统率着N个士兵,士兵分别编号为1~N,南将军常 ...

  6. [OpenGL] 斯坦福兔子与显示列表

    1.调整桌子的大小.         在OpenGL绘制长方体,能够通过函数: glutSolidCube(Size)          绘制得到的是一个正方体,再利用缩放矩阵使其变成长方体.使得桌子 ...

  7. python xlsxwriter写excel并操作各种格式属性

    # -*- coding: utf-8 -*- import xlsxwriter workbook = xlsxwriter.Workbook('test.xlsx') worksheet = wo ...

  8. 前端安全系列之二:如何防止CSRF攻击

    原文:https://my.oschina.net/meituantech/blog/2243958 背景 随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企业安全问题 ...

  9. Java泛型的PECS原则

    1.什么是PESC ? PESC  = producer-extens , consumer -super. 如果参数化类型表示一个 T 生产者,就使用 <? extends T>: 如果 ...

  10. XPages访问关系型数据库技术与最佳实践

    XPage 对于 Domino 开发人员的一大好处就是能够很方便和高效的访问关系型数据库.本文通过实例代码展现了在 XPage 中访问关系型数据库的具体步骤 , 同时讲解了一些在 XPage 中高效访 ...