前端自动化测试工具:SlimerJS、phantomJS 和 CasperJS


 

对于富客户端的 Web 应用页面,自动登录、页面修改、抓取页面内容、屏幕截图、页面功能测试…面对这些需求,使用后端语言需要花费不少的精力才能实现。此时 SlimerJS、phantomJS 或 CasperJS 或许是更好的一种选择。

一、PhantomJS 和 SlimerJS

PhantomJS 和 SlimerJS 都是服务器端的 JavaScript API 工具,可以理解为无界面的可编程操作的浏览器。 它们大部分的 API 接口都很相似,使用方法也很接近,最大的不同在于:PhantomJS 基于 Webkit 内核,不支持 Flash 的播放;SlimerJS 基于火狐的 Gecko 内核,支持 Flash播放,并且执行过程会有页面展示。

借助 PhantomJS 或 SlimerJS 所提供的 API,你几乎可以使用 javascript 模拟在浏览器上的任何操作:打开页面、前进/后退、页面点击、鼠标滚动、DOM 处理、CSS 选择器、Canvas 画布、SVG画图,如此等等。

例如,对页面的某个区域截图:

SlimerJS 示例:

var webpage = require('webpage').create();
webpage.open('http://www.meizu.com') // 打开一个网页
.then(function() { // 页面加载完成后执行//保存页面截屏webpage.viewportSize = {width: 650,height: 320};webpage.render('page.png', {onlyViewport: true});//再打开一个网页return webpage.open('http://bbs.meizu.com');
})
.then(function() {// 点击某个位置webpage.sendEvent("click", 5, 5, 'left', 0);slimer.exit(); //退出
});

将以上代码保存为 test_slimerjs.js,然后执行:

slimerjs test_slimerjs.js

PhantomJS 示例:

var webpage = require('webpage').create();
var url = 'http://www.phantomjs.org/';
webpage.open('http://www.meizu.com', function (status) {//打开一个页面
}).then(function(){//保存页面截屏webpage.viewportSize = {width: 650,height: 320};webpage.render('page.png', {onlyViewport: true});//再打开一个网页return webpage.open('http://bbs.meizu.com');
}).then(function(){webpage.sendEvent("click", 5, 5, 'left', 0);phantom.exit();
});

将以上代码保存为 test_phantomjs.js,然后执行:

phantomjs test_phantomjs.js

可以看到,上面的代码内容非常相似,实现的功能都是打开页面,然后截图。

参考:

http://phantomjs.org/
https://github.com/ariya/phantomjs
http://slimerjs.org/
http://docs.slimerjs.org/current/
https://github.com/laurentj/slimerjs/

二、前端自动化测试工具 CasperJS

CasperJS 是一个开源的导航脚本和测试工具。它提供了一套用于 Web 应用测试的方法组件,这些组件基于 PhantomJS 或 SlimerJS 所提供的 javascript API,实现对 Web 应用的功能执行。CasperJS 简化了完整的导航场景的过程定义,提供了用于完成常见任务的实用的高级函数、方法和语法。如:

  • 定义和整理导航步骤
  • 表单填充
  • 点击、跟踪链接
  • 区域、页面截图
  • 断言远程DOM
  • 日志、事件
  • 资源下载,包括二进制资源
  • 捕捉错误,并做出相应的响应
  • ……

使用 CasperJS 的方法组件,可以更方便的书写前端自动化测试脚本。

CasperJS 示例:

var utils = require('utils');
var webpage = require('casper').create({//verbose: true,logLevel: 'debug',viewportSize: {width: 1024,height: 768},pageSettings: {loadImages: true,loadPlugins: true,XSSAuditingEnabled: true}
});//打开页面
webpage.start().thenOpen('http://www.meizu.com', function openMeizu(res) {this.echo('打印页面信息');res.body = '';//不打印body信息utils.dump(res);//点击登录按钮if (this.exists("#_unlogin")) {this.echo('点击登录按钮');this.click("#_unlogin a:nth-child(1)");this.wait(3000, function wait3s_1() {if (this.exists("form#mainForm")) {this.echo("需要登陆,填充账号信息。。。");//填充表单账号this.fill('form#mainForm', {'account': 'lzwy***@flyme.cn','password': '********'}, true);this.capture('meizu_login_page.png');this.wait(3000, function wait3s_2() {//登录按钮存在,点击if (this.exists("#login")) {this.echo('提交登录');this.click("#login");}});}});}}).then(function capture() {if (this.exists('#mzCustName')) {this.echo('登录成功!开始截图存储..');} else {this.echo('登录失败!请查看截图文件')}//截图this.capture('meizu.png');this.captureSelector('meizu_header.png', 'div.meizu-header');}).then(function exit() {this.echo('执行完成,退出');this.exit();}).run();

将以上代码保存为 test_casperjs.js,然后执行:

casperjs test_casperjs.js

效果参考:

meizu_login_page
图1 登陆页
meizu
图2 首页登陆成功
meizu_header
图3 局部截取(header)

提示:可在 create casper 对象时进行一些初始化设置,比如不用请求图片资源,CSS资源,以及不需要的JS等资源,这样可以加快测试执行速度。

http://casperjs.org/
http://www.qiqishare.com/

三、安装与使用 SlimerJS、phantomJS 和 CasperJS

1. 安装

nodejs 安装:

http://nodejs.org

https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager

CasperJS 安装(需要 python2.6 以上版本支持):

执行命令:

npm install -g casperjs

http://docs.casperjs.org/en/latest/installation.html
https://www.python.org/download/

SlimerJS 安装(需要先安装 Firefox 或 XulRunner ):

执行命令:

npm install -g slimerjs

http://www.slimerjs.org/download.html
http://docs.slimerjs.org/current/installation.html

phantomJS 安装:

npm install -g phantomjs-prebuilt

或者下载 phantomJS:http://phantomjs.org/download.html
解压并配置 phantomjs.exe 访问路径到环境变量。

2. 使用

将上文示例保存为 js 文件(如 test_*.js) ,然后打开命令行,进入到该文件所在目录下,执行命令:

slimerjs test_slimerjs.js

phantomjs test_phantomjs.js
# 默认使用 phantomjs 引擎
casperjs test_casperjs.js
# 使用 slimerjs 引擎
casperjs test_casperjs.js –disk-cache=yes –engine=slimerjs

可对比查看执行过程与结果。

本文只是简单介绍三种工具的功能与基本安装使用,具体功能应用可参考其各自文档,也可在讨论区书写您的意见和建议。

附:前端自动化测试工具 Selenium

Selenium 也是一个前端自动化测试工具,与 casperJS 的无界面方式不同,Selenium 是直接运行于浏览器中,并且通过插件可以实现脚本录制等功能。

http://docs.seleniumhq.org/

 

转载于:https://www.cnblogs.com/limingziqiang/p/8622271.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 封装 继承 堕胎_Java的继承、封装和多态

一、继承继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。继承的特性子类拥有父类非 private 的属性、方法。子类可以拥有自己的属性和方法,即子类…

HTML5学习笔记简明版(4):新元素之video,audio,meter,datalist,keygen,output

video 通过<video>标签&#xff0c;我们可以抛弃最近不怎么讨好的Flash&#xff0c;直接在页面中播放视频文件。视频文件自然是最符合语义化的文件格式&#xff0c;但该元素标签同样支持音频与图片。 过去(及目前)&#xff0c;我们通常要使用类似下面这样繁冗丑陋的代码来…

P2782 友好城市

题目描述 有一条横贯东西的大河&#xff0c;河有笔直的南北两岸&#xff0c;岸上各有位置各不相同的N个城市。北岸的每个城市有且仅有一个友好城市在南岸&#xff0c;而且不同城市的友好城市不相同。每对友好城市都向政府申请在河上开辟一条直线航道连接两个城市&#xff0c;但…

五个在线图形工具创建简单的设计元素

有很多网站可以为图形元素生成提供服务&#xff0c;但获得非常好的工具并不容易。这就是为什么我共享五个在线的图形工具的原因 Logotype Maker 这是一个简单而自由的做标志的Web工具&#xff0c;它可以帮助您创建一个标志 BgPatterns BgPatterns按几次按键&#xff0c;做背景图…

java shape类_Java——Shape类

Description定义一个形状类Shape&#xff0c;提供计算周长getPerimeter()和面积getArea()的函数定义一个子类正方形类Square继承自Shape类&#xff0c;拥有边长属性&#xff0c;提供构造函数&#xff0c;能够计算周长getPerimeter()和面积getArea()定义一个子类长方形类Rectang…

sulin Python3.6爬虫+Djiago2.0+Mysql --实例demo

1.切换到项目目录下&#xff0c;启动测试服务器 manage.py runserver 192.168.0.108:8888 2.设置相关配置 项目目录展示如下&#xff1a; beauty>settings.py 修改 2.1 添加app到应用程序中 2.2 设置模板路径 2.3 配置数据为mysql 2.4设置静态文件路径 2.5设置漏油 3.beau…

dubbo的invoke命令_dubbo 调试服务telnet命令

1.概述在我们使用dubbo实现分布式布局时&#xff0c;如果我们想测试我们刚写好的service层服务是否正确时&#xff0c;通常要将service层和web层同时开启&#xff0c;通过浏览器调用controller层端口&#xff0c;达到测试service层的目的。有时&#xff0c;这样的测试方法过于麻…

18个不常见的C#关键字,您使用过几个?

18个不常见的C#关键字&#xff0c;您使用过几个&#xff1f;1、__arglist 让我们先从__arglist开始。 __arglist是用来给方法传送参数。通常我们是通过函数头部指定的参数列表给方法传递参数的。如果我们想要给方法传递一组新的参数&#xff0c;我们需要重载方法。如果我们想…

C指针详解

前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运…

java collection api_Java Stream和Collection比较:何时以及如何从Java API返回?

向您展示一些可以非常方便地使用Java Stream流的场景以及如何使用它们的示例。本文基于标准Java库java.util.stream。它既与反应流无关&#xff0c;也与诸如Vavr之类的其他流实现无关。另外&#xff0c;我将不介绍诸如并行执行之类的流的高级细节。首先&#xff0c;让我们简要讨…

依赖属性

项目的WF中用到了依赖属性, 有点晕, 不明白, 先来段代码: public static DependencyProperty IsSignInProperty DependencyProperty.Register("IsSignIn", typeof(System.String), typeof(StateMachineWF.WF1)); [DesignerSerializationVisibilityAttribute(Designe…

[UE4]集合:TSet容器

一、TSet<T>是什么 UE4中&#xff0c;除了TArray动态数组外&#xff0c;还提供了各种各样的模板容器。这一节&#xff0c;我们就介绍集合容器——TSet<T>。类似于TArray<T>&#xff0c;尖括号里面的T是模板类型&#xff0c;可以是任何C类型。一个集合表示了一…

【汇总】flash单个文件上传

之前有朋友给我发送email&#xff0c;询问我是否有单个文件上传的源代码&#xff0c;因为当时写这个好像是在09年&#xff0c;所以放哪了一时也没找着。后来整理硬盘的时候&#xff0c;找到了源码&#xff0c;所以决定来个汇总&#xff08;之前写过的关于flashjs上传文件的例子…

2018.3.24 struct

好了今天听完了struct&#xff0c;感觉也差不多了&#xff0c;后面的视频不想听了&#xff0c;io啊预处理啊什么的用时候现学就好了。主要是就这么光听却没有作业可做真的有点不爽。 明天开始15-213&#xff0c;反正手头也有c primer plus了&#xff0c;后面遇到什么问题看书就…

一直苦于没有好的资产管理软件,GLPI能解决吗?

一直苦于没有好的资产管理软件&#xff0c;正好看到网上文章有介绍glpi资产管理开源软件 在此做个记录&#xff0c;有时间一定要测试一下 &#xff08;1&#xff09;资产管理工具GLPI 官网 http://www.glpi-project.org/ GLPI是法语Gestionnaire libre de parc informatique的…

weka的java环境配置_windows下安装和配置Weka

Weka是一款免费的&#xff0c;非商业化的&#xff0c;基于java环境下的开源的机器学习以及数据挖掘软件。Weka里含有各种数据挖掘工具&#xff1a;数据预处理&#xff0c;分类与回归&#xff0c;聚类&#xff0c;关联规则和可视化工具。一、安装weka我们首先需要到weka官网上下…

Windows部署服务WDS实例

一&#xff1a;概述<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />Windows&#xff08;Windows Deployment Services&#xff09; 部署服务适用与大中型网络中的计算机操作系统部署。可以使用 Windows 部署服务来管理映像以及无…

JAVA----爬虫(一)JSoup

jsoup 是一款Java 的HTML解析器&#xff0c;可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API&#xff0c;可通过DOM&#xff0c;CSS以及类似于jQuery的操作方法来取出和操作数据。 官方api:https://jsoup.org/ 一、jsoup功能 简单的例子&#xff1a;抓取wiki的…

java语言模拟_Java语言模拟操作系统.doc

河北大学2010级操作系统课程设计论文PAGEPAGE 27装订线装订线(指导教师用表)学 生 姓 名指 导 教 师论文(设计)题目Java语言模拟操作系统主要研究(设计)内容使用java语言&#xff0c;采用多到程序设计方法基本上实现并模拟了单用户操作系统。该操作系统包括四部分内容&#xff…

极速理解设计模式系列:22.状态模式(State Pattern)

四个角色&#xff1a;抽象状态类(State)、具体状态类(ConcreateState)、情景类(Context)、客户端(Client) 抽象状态类(State):提供一个与情景类有关的State行为。 具体状态类(ConcreateState):实现这个行为&#xff0c;实现一个状态。 情景类(Context):维护一个State的实例对象…