通过一周多的学习和总结,终于掌握了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的更多相关文章

  1. 简单Web UI 自动化测试框架 pyse

    WebUI automation testing framework based on Selenium and unittest. 基于 selenium 和 unittest 的 Web UI自动 ...

  2. 转载 基于Selenium WebDriver的Web应用自动化测试

    转载原地址:  https://www.ibm.com/developerworks/cn/web/1306_chenlei_webdriver/ 对于 Web 应用,软件测试人员在日常的测试工作中, ...

  3. Robot Framework与Web界面自动化测试学习笔记:简单例子

    假设环境已经搭建好了.这里用RIDE( Robot Framework Test Data Editor)工具来编写用例.下面我们对Robot Framework简称rf. 我们先考虑下一个最基本的登 ...

  4. web前端自动化测试/爬虫利器puppeteer介绍

    web前端自动化测试/爬虫利器puppeteer介绍 Intro Chrome59(linux.macos). Chrome60(windows)之后,Chrome自带headless(无界面)模式很 ...

  5. 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用

    使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用 使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化 使用 Flask 框架写用 ...

  6. Nginx + FastCGI 程序(C/C++)搭建高性能web service的demo

    http://blog.csdn.net/chdhust/article/details/42645313 Nginx + FastCGI 程序(C/C++)搭建高性能web service的Demo ...

  7. Robot Framework与Web界面自动化测试:简单例子

    假设环境已经搭建好了.这里用RIDE( Robot Framework Test Data Editor)工具来编写用例.下面我们对Robot Framework简称rf. 我们先考虑下一个最基本的登 ...

  8. Web前端自动化测试Cypress实践总结

    本文主要首先主要介绍了什么是自动化测试,接着对常用的自动化测试框架进行了对比分析,最后,介绍了如果将自动化测试框架Cypress运用在项目中. 一.自动化测试概述 为了保障软件质量,并减少重复性的测试 ...

  9. 用postman进行web端自动化测试

    概括说一下,web接口自动化测试就是模拟人的操作来进行功能自动化,主要用来跑通业务流程. 主要有两种请求方式:post和get,get请求一般用来查看网页信息:post请求一般用来更改请求参数,查看结 ...

随机推荐

  1. Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题)

     Halcon的HWindowControl控件在WinForm程序中的使用介绍(重点解决图片缩放的问题) 2016-12-04 20:11 362人阅读 评论(4) 收藏 举报  分类: Halco ...

  2. Oracle11gR2--SEC_CASE_SENSITIVE_LOGON参数解析

    在Oracle的11g之前的版本中密码是不区分大小写的(使用双引号强制除外). 在Oracle的11g以及以后的版本中对此有所增强.从此密码有了大小写的区分. 这个大小写敏感特性是通过SEC_CASE ...

  3. jquery-attr与prop

    问题:经常使用jQuery插件的attr方法获取checked属性值,获取的值的大小为未定义,此时可以用prop方法获取其真实值,下面介绍这两种方法的区别: 1.通过prop方法获取checked属性 ...

  4. 并发之AtomicIntegerArray

    5 并发之AtomicIntegerArray     该类是Java对Integer数组支持的原子性操作:在认识这个类之前我们先来看一个方法,这个方法是Integer类中的:  public sta ...

  5. 关于使用sessionStorage报SecurityError错误的问题

    localStorage 永久保存 不同页面和标签页可以共享 关闭浏览器不会清除 sessionStorage 会话保存 不同页面和标签页不能共享 关闭浏览器会清除 遇到的问题:在firefox中报S ...

  6. 对输入字符进行HTML转义 OR  去HTML标签

    /** * 对输入字符进行HTML转义 * @param mixed $data */ public static function escape($data) { if(is_array($data ...

  7. Luogu 4755 Beautiful Pair

    分治 + 主席树. 设$solve(l, r)$表示当前处理到$[l, r]$区间的情况,我们可以找到$[l, r]$中最大的一个数的位置$mid$,然后扫一半区间计算一下这个区间的答案. 注意,这时 ...

  8. Yii2验证登录得User类

    Yii2中的  Class yii\web\User 是如果进行验证登录,如果我们使用User类验证登录会给我们减少很多麻烦.在此就拿Yii2中自带的登录功能进行说明. 配置.在应用配置文件compo ...

  9. [GO]map做函数参数

    package main import "fmt" func test(m map[int]string) { delete(m, ) } func main() { m := m ...

  10. Storm的wordCounter计数器详解

    原文:http://www.maoxiangyi.cn/index.php/archives/362 拓扑 点击(此处)折叠或打开 package cn.jd.storm; import backty ...