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();

    });

});

你可能感兴趣的:(自动化测试)