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请求一般用来更改请求参数,查看结 ...
随机推荐
- javascipt——原型
1.原型存在的意义 JS不是面向对象的语言,没有类的概念,但是提供了构造器函数,其也可以创建一个对象.构造器函数如下: function people(name, age, sex) { this.n ...
- leetcode804
int uniqueMorseRepresentations(vector<string>& words) { map<char, string> st; st.ins ...
- Open XML 检索 EXCEL
1.Excel 隐藏行判断 项目的 Hidden 属性不为 null,且 Hidden 属性的值为 True var itemList = ws.Descendants<Row>(). W ...
- VxWorks多任务功能
http://blog.chinaunix.net/uid-23741326-id-84935.html VxWorks的任务有优先级的概念,其任务调度也是基于优先级考虑的,是抢占式的,VxWorks ...
- Hadoop之HDFS(一)HDFS入门及基本Shell命令操作
1 . HDFS 基本概念 1.1 HDFS 介绍 HDFS 是 Hadoop Distribute File System 的简称,意为:Hadoop 分布式文件系统.是 Hadoop 核心组件之 ...
- java基础之JDBC八:Druid连接池的使用
基本使用代码: /** * Druid连接池及简单工具类的使用 */ public class Test{ public static void main(String[] args) { Conne ...
- 07-Location之正则匹配
大网站专门有自己的图片服务器,起码也得单独放一个目录里面. 淘宝网有些图片开启了防盗链(即使是小图片,也不让你下载,真小气).163新闻可以下载. 用正则匹配uri中的image,就是说你的uri中到 ...
- SqlServer—大话函数依赖与范式
说明:数据库中的某些概念真的很让人头疼,概念的东西本来就是很枯燥的,再加上枯燥的学习,那就更加枯燥了.概念这东西,你不理解也能生产东西,经验多了就行,但是为了更深入的学习,你还必须理解.这里,我抛开书 ...
- Hyperledger Fabric Chaincode解析
首先看下Blockchain结构,除了header指向下一个block的hash value外,block是由一组transaction构成, Transactions --> Blocks - ...
- unity5.6里Baked Lighting下面几个Lighting Mode的解释
这个似乎是新增的功能,目前在官方文档里还没有解释,但有一个链接指向『草案』, 可是链接在被墙的google doc上,为了方便阅读和备忘,全部贴过来整在一起: 因为原文太长,把总结写在前面吧: 1.四 ...