小而美的ghost driver
做过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的更多相关文章
- selenium webdriver的各种driver
selenium官方加上第三方宣布支持的驱动有很多种:除了PC端的浏览器之外,还支持iphone.Android的driver:大概记录一下selenium支持的各种driver的用途与说明. sel ...
- selenium帮助手册以及 webdriver的各种driver
帮助手册 http://selenium-python.readthedocs.io/locating-elements.html 转载于:http://blog.csdn.net/five3/art ...
- Selenium Web 自动化 - 项目实战(一)
Selenium Web 自动化 - 测试框架(一) 2016-08-05 目录 1 框架结构雏形2 把Java项目转变成Maven项目3 加入TestNG配置文件4 Eclipse编码修改5 编写代 ...
- 基于Python, Selenium, Phantomjs无头浏览器访问页面
引言: 在自动化测试以及爬虫领域,无头浏览器的应用场景非常广泛,本文将梳理其中的若干概念和思路,并基于代码示例其中的若干使用技巧. 1. 无头浏览器 通常大家在在打开网页的工具就是浏览器,通过界面上输 ...
- 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 ...
- 深入linux kernel内核配置选项
============================================================================== 深入linux kernel内核配置选项 ...
- 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 ...
- 抛弃vboot不格盘用grub4dos+firadisk安装Ghost版XP到VHD,轻松RAMOS!
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=363198&extra=抛弃vboot不格盘用grub4dos+firadisk安 ...
- MongoDB Java Driver操作指南
MongoDB为Java提供了非常丰富的API操作,相比关系型数据库,这种NoSQL本身的数据也有点面向对象的意思,所以对于Java来说,Mongo的数据结构更加友好. MongoDB在今年做了一次重 ...
随机推荐
- Hotmail Smtp邮箱发送的端口
1.最近有项目需求做监控报警. 2.使用Smtp发邮件时,网上找了一大堆,Smtp服务是:smtp.live.com 端口是:25或587,试了好多次都不行.原来端口是465. 3.发送时,我启用 ...
- linux 新进程的创建
慕课18原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.背景知识: 1. ...
- 2019微信公开课Pro微信之夜内容笔记总结
2019微信公开课Pro 微信之夜内容笔记总结 小程序入口 我的小程序 任务栏入口 线下扫码 搜索小程序 附近小程序升级 用户留存问题 小程序成长 关注用户需求 性能监控 广告主&& ...
- Java中equals()和hashCode()的关系以及重写equals()和hashCode()的重要性
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6580647.html 一:关系 如果两个对象相等(equal),它们的hashcode一定相同: 如果两个对 ...
- Java并发容器之非阻塞队列ConcurrentLinkedQueue
参考资料:http://blog.csdn.net/chenchaofuck1/article/details/51660521 实现一个线程安全的队列有两种实现方式:一种是使用阻塞算法,阻塞队列就是 ...
- C3P0连接池使用教程
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6405861.html 在项目中的应用见: https://github.com/ygj0930/Coupl ...
- FTP在CentOS上安装与使用
安装: yum install -y vsftpd 相关配置文件: /etc/vsftpd/vsftpd.conf //主配置文件,核心配置文件 /etc/vsftpd/ftpusers //黑名单, ...
- 〖Android〗代理与正常网络分开同步CyangenMod源码
为了同步CyanogenMod源代码,你也学会了FQ,对吗? 通常 .repo/manifest.xml 文件有Google AOSP的Project,也有Github的Project: 访问Gith ...
- 【转】IP地址、子网掩码、网络号、主机号、网络地址、主机地址以及ip段
背景知识 IP地址 IP地址被用来当做Internet上的电脑的身份编号.大家日常见到的情况是每台联网的PC上都需要有IP地址,才能正常通信.我们可以把“个人电脑”比作“一台电话”,那么“IP地址”就 ...
- RHEL7-openldap安装配置二(客户端安装配置)
LDAP用户登录流程: 当在客户端输入账号登录系统时,系统根据/etc/nsswitch.conf配置文件获取账号查找顺序,然后再根据PAM配置文件调用相关模块,对账号(/etc/passwd)及密码 ...