casperjs进行web功能自动化测试demo
通过一周多的学习和总结,终于掌握了casperjs用于自动化的方法,填平了大大小小的各种坑。
casperjs是一个新兴的测试框架,网上资料很少,基本上靠翻译英文资料。
贡献出来,供大家参考:
//page.js,存放页面元素
//c表示通过css选择元素,x表示通过xpath选择元素
var baseurl="http://www.cnblogs.com/reach296/";
var base={
//首页
url:baseurl,
c:{
登录表单:'form#login',
登录按钮:'.btn'
}
};
var index={
//登录后成功后跳转页
url:baseurl+"/seven/index"
};
var sidebar={
//左边框
url:baseurl+"/seven/sidebar.jsp",
x:{
应用库:"//span[contains(text(),应用库)]",
应用分类:"//ul[@class='submenu']/li/a[1]"
}
};
var category_list={
//应用分类page
url:baseurl+"/seven/app/category-list",
c:{
名称:'td.sorting_1'
},
x:{
表格:'//*[@id="sample-table-2"]/tbody/tr',
名称:'//*[@id="sample-table-2"]/tbody/tr/td[1]',
海报:'//*[@id="sample-table-2"]/tbody/tr/td[2]',
编辑:'//*[@id="sample-table-2"]/tbody/tr/td[3]'
}
} //common.js,存放全局变量和方法 var path={
capture:'cms/capture/',
lib:'cms/lib/'
};
var cap={
clipRect:{top: 0,left: 0,width: 1024,height: 768},
// clipRect:{width: 1024,height:768},
imgOptions:{format: 'jpg',quality:100}
};
var account={'loginName':'reachwang','passwd':'test12345'}; function get_menu_links(){
//获取一级模块
var links = window.frames[0].document.getElementsByTagName("frame")[0].contentDocument.getElementsByClassName("menu-text");
return Array.prototype.map.call(links, function(e) {
return e.innerText;
});
}; function get_submenu_links(){
//获取二级模块
var links = window.frames[0].document.getElementsByTagName("frame")[0].contentDocument.querySelectorAll('.submenu a');
return Array.prototype.map.call(links, function(e) {
return (e.innerText).replace(/(^\s*)|(\s*$)/g, "");
});
}; //应用分类测试用例,检查应用分类页面是否正常展示,分类数据是否存在
casper.test.begin('应用分类测试用例',function suite(test) {
casper.options.verbose = true;
casper.options.logLevel = "debug";
casper.options.viewportSize={width: 1024, height: 768};
casper.options.waitTimeout=20000;
// casper.options.clientScripts=[
// path.lib+'common.js'
// ];
casper.test.comment('检查应用分类页面是否正常展示,分类数据是否存在');
casper.start(base.url, function() {
this.echo("1、打开登录页面");
test.assertHttpStatus(200,"检查http请求状态"); }); casper.waitForSelector(base.c.登录按钮, function() {
this.echo("2、登录页面截图");
this.capture(path.capture+"登录页面.jpg",cap.clipRect, cap.imgOptions);
}); casper.then(function() {
this.echo("3、登录页面检查");
test.assertTitle("TCL CMS", "标题正确");
test.assertExists(base.c.登录表单, "帐号登录表单存在");
this.echo("4、输入帐号和密码");
this.fill(base.c.登录表单, account, true);
this.echo("5、点击登录按钮");
test.assertExists(base.c.登录按钮, "登录按钮存在");
this.mouse.click(base.c.登录按钮);
});
casper.waitForUrl(index.url,function(){
test.assertHttpStatus(200,"跳转到登录完成页");
this.capture(path.capture+'跳转到登录完成页.jpg',cap.clipRect, cap.imgOptions); });
casper.withFrame(0,function(){
this.echo("切换到mian frame里");
casper.withFrame(0,function(){
this.echo("切换到mian frame下的sider frame里");
this.echo("6、点击应用库");
this.click({type: 'xpath',path:sidebar.x.应用库});
this.echo("7、点击应用分类");
this.click({type: 'xpath',path:sidebar.x.应用分类});
});
});
casper.waitForUrl(index.url,function(){
test.assertHttpStatus(200,"跳转到应用分类页");
this.capture(path.capture+'打开应用分类.jpg',cap.clipRect, cap.imgOptions); });
casper.withFrame(0,function(){
this.echo("切换到mian frame里");
casper.withFrame(1,function(){
this.echo("应用分类页面")
test.assertExists({type: 'xpath',path:category_list.x.表格},"表格检查");
test.assertExists(category_list.c.名称,"名称字段检查");
test.assertExists({type: 'xpath',path:category_list.x.海报},"海报字段检查");
test.assertExists({type: 'xpath',path:category_list.x.编辑},"编辑字段检查");
});
});
casper.run(function() {
test.done();
});
});
casperjs进行web功能自动化测试demo的更多相关文章
- 简单Web UI 自动化测试框架 pyse
WebUI automation testing framework based on Selenium and unittest. 基于 selenium 和 unittest 的 Web UI自动 ...
- 转载 基于Selenium WebDriver的Web应用自动化测试
转载原地址: https://www.ibm.com/developerworks/cn/web/1306_chenlei_webdriver/ 对于 Web 应用,软件测试人员在日常的测试工作中, ...
- Robot Framework与Web界面自动化测试学习笔记:简单例子
假设环境已经搭建好了.这里用RIDE( Robot Framework Test Data Editor)工具来编写用例.下面我们对Robot Framework简称rf. 我们先考虑下一个最基本的登 ...
- web前端自动化测试/爬虫利器puppeteer介绍
web前端自动化测试/爬虫利器puppeteer介绍 Intro Chrome59(linux.macos). Chrome60(windows)之后,Chrome自带headless(无界面)模式很 ...
- 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...
- Nginx + FastCGI 程序(C/C++)搭建高性能web service的demo
http://blog.csdn.net/chdhust/article/details/42645313 Nginx + FastCGI 程序(C/C++)搭建高性能web service的Demo ...
- Robot Framework与Web界面自动化测试:简单例子
假设环境已经搭建好了.这里用RIDE( Robot Framework Test Data Editor)工具来编写用例.下面我们对Robot Framework简称rf. 我们先考虑下一个最基本的登 ...
- Web前端自动化测试Cypress实践总结
本文主要首先主要介绍了什么是自动化测试,接着对常用的自动化测试框架进行了对比分析,最后,介绍了如果将自动化测试框架Cypress运用在项目中. 一.自动化测试概述 为了保障软件质量,并减少重复性的测试 ...
- 用postman进行web端自动化测试
概括说一下,web接口自动化测试就是模拟人的操作来进行功能自动化,主要用来跑通业务流程. 主要有两种请求方式:post和get,get请求一般用来查看网页信息:post请求一般用来更改请求参数,查看结 ...
随机推荐
- mahout in Action2.2-给用户推荐图书(2)-分析对用户推荐书目的结果
2.2.3 Analyzing the output 在之前的程序运行结果中我们得到的结果输出是: RecommendedItem [item:104, value:4.257081] 程序要求选择一 ...
- 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 8_Neural Networks Representation 神经网络的表述
神经网络是一种受大脑工作原理启发的模式. 它在许多应用中广泛使用:当您的手机解释并理解您的语音命令时,很可能是神经网络正在帮助理解您的语音; 当您兑现支票时,自动读取数字的机器也使用神经网络. 8.1 ...
- docker 制作本地镜像
docker commit 55ddf8d62688 py_wb # 容器ID, 容器名称tag py_wb IP地址:5000/my-web:20180511 # 远程registory地址 我的镜 ...
- NODEJS网站
nodejs https://nodejs.org/en/ nodejs官网 http://nodeapi.ucdok.com/#/api/ nodejs手册 https://www.npmjs.co ...
- Gym 101128 B Black Vienna
题意 有A-Z 26张牌,现在从中抽出3张牌,并把剩下的23张牌分给选手1和2,现在有n次询问,每次询问一个选手是否有某两张牌,和选手的回答.回答说自己有这两张牌中的几张,问拿出的三张牌有多少种方案能 ...
- 【bzoj2818】Gcd
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 4344 Solved: 1912[Submit][Status][Discuss ...
- QPS、PV和需要部署机器数量计算公式
QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准. TPS是 Transactions ...
- SpringBoot18 Swagger、API接口文档生成、WireMock、模拟后台数据
1 Swagger 1.1 简述 前后端分离的项目需要前后端开发人员协同工作,后台开发人员需要给到前端开发者一套API文档:利用Swagger可以简单高效的帮助后台开发者生成RestfulAPI开发文 ...
- xml 操作(动态添加 property属性 其他节点同理)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Part10-C语言环境初始化-一跃进入C大门lesson3
1.跳转到c代码 因为内存中的代码来自于垫脚石SRAM,他们是相同的. 采用绝对跳转方式来完成. 因为我们是从汇编代码跳转到c语言的程序,所以我们要提前准备一个main.c文件. 修改makefile ...