首页 > 上网技巧 > 电脑小技巧 > casperjs进行web功能自动化测试源码分享

casperjs进行web功能自动化测试源码分享

时间:2014-10-16 17:06 作者:QQ地带 我要评论

 

通过一周多的学习和总结,终于掌握了casperjs用于自动化的方法,填平了大大小小的各种坑。

casperjs是一个新兴的测试框架,网上资料很少,基本上靠翻译英文资料。

贡献出来,供大家参考:

  1. //page.js,存放页面元素 
  2. //c表示通过css选择元素,x表示通过xpath选择元素 
  3. var baseurl="http://www.oicqzone.com/"
  4. var base={ 
  5.     //首页 
  6.     url:baseurl, 
  7.     c:{ 
  8.         登录表单:'form#login'
  9.         登录按钮:'.btn' 
  10.     } 
  11. }; 
  12. var index={ 
  13.     //登录后成功后跳转页 
  14.     url:baseurl+"/seven/index" 
  15. }; 
  16. var sidebar={ 
  17.     //左边框 
  18.     url:baseurl+"/seven/sidebar.jsp"
  19.     x:{ 
  20.         应用库:"//span[contains(text(),应用库)]"
  21.         应用分类:"//ul[@class='submenu']/li/a[1]" 
  22.     } 
  23. }; 
  24. var category_list={ 
  25.     //应用分类page 
  26.     url:baseurl+"/seven/app/category-list"
  27.     c:{ 
  28.         名称:'td.sorting_1' 
  29.     }, 
  30.     x:{ 
  31.         表格:'//*[@id="sample-table-2"]/tbody/tr'
  32.         名称:'//*[@id="sample-table-2"]/tbody/tr/td[1]'
  33.         海报:'//*[@id="sample-table-2"]/tbody/tr/td[2]'
  34.         编辑:'//*[@id="sample-table-2"]/tbody/tr/td[3]' 
  35.     } 
  36.  
  37. //common.js,存放全局变量和方法 
  38.  
  39. var path={ 
  40.     capture:'cms/capture/'
  41.     lib:'cms/lib/' 
  42. }; 
  43. var cap={ 
  44.     clipRect:{top: 0,left: 0,width: 1024,height: 768}, 
  45. //  clipRect:{width: 1024,height:768}, 
  46.     imgOptions:{format: 'jpg',quality:100} 
  47. }; 
  48. var account={'loginName':'reachwang','passwd':'test12345'}; 
  49.  
  50. function get_menu_links(){ 
  51.     //获取一级模块 
  52.     var links = window.frames[0].document.getElementsByTagName("frame")[0].contentDocument.getElementsByClassName("menu-text");  
  53.     return Array.prototype.map.call(links, function(e) { 
  54.         return e.innerText; 
  55.     }); 
  56. }; 
  57.  
  58. function get_submenu_links(){ 
  59.     //获取二级模块 
  60.     var links = window.frames[0].document.getElementsByTagName("frame")[0].contentDocument.querySelectorAll('.submenu a');   
  61.     return Array.prototype.map.call(links, function(e) { 
  62.         return (e.innerText).replace(/(^\s*)|(\s*$)/g, ""); 
  63.     }); 
  64. }; 
  65.  
  66. //应用分类测试用例,检查应用分类页面是否正常展示,分类数据是否存在 
  67. casper.test.begin('应用分类测试用例',function suite(test) { 
  68.     casper.options.verbose = true
  69.     casper.options.logLevel = "debug"
  70.     casper.options.viewportSize={width: 1024, height: 768}; 
  71.     casper.options.waitTimeout=20000; 
  72. //  casper.options.clientScripts=[ 
  73. //      path.lib+'common.js' 
  74. //  ]; 
  75.     casper.test.comment('检查应用分类页面是否正常展示,分类数据是否存在'); 
  76.     casper.start(base.url, function() { 
  77.         this.echo("1、打开登录页面"); 
  78.         test.assertHttpStatus(200,"检查http请求状态"); 
  79.          
  80.     }); 
  81.     
  82.     casper.waitForSelector(base.c.登录按钮, function() {     
  83.         this.echo("2、登录页面截图"); 
  84.         this.capture(path.capture+"登录页面.jpg",cap.clipRect, cap.imgOptions);  
  85.     }); 
  86.  
  87.     casper.then(function() { 
  88.         this.echo("3、登录页面检查");   
  89.         test.assertTitle("TCL CMS""标题正确"); 
  90.         test.assertExists(base.c.登录表单, "帐号登录表单存在"); 
  91.         this.echo("4、输入帐号和密码"); 
  92.         this.fill(base.c.登录表单, account, true); 
  93.         this.echo("5、点击登录按钮"); 
  94.         test.assertExists(base.c.登录按钮, "登录按钮存在"); 
  95.         this.mouse.click(base.c.登录按钮); 
  96.     }); 
  97.     casper.waitForUrl(index.url,function(){ 
  98.         test.assertHttpStatus(200,"跳转到登录完成页"); 
  99.         this.capture(path.capture+'跳转到登录完成页.jpg',cap.clipRect, cap.imgOptions); 
  100.          
  101.     }); 
  102.     casper.withFrame(0,function(){ 
  103.         this.echo("切换到mian frame里"); 
  104.         casper.withFrame(0,function(){ 
  105.             this.echo("切换到mian frame下的sider frame里"); 
  106.             this.echo("6、点击应用库"); 
  107.             this.click({type: 'xpath',path:sidebar.x.应用库}); 
  108.             this.echo("7、点击应用分类"); 
  109.             this.click({type: 'xpath',path:sidebar.x.应用分类}); 
  110.         });  
  111.     }); 
  112.     casper.waitForUrl(index.url,function(){ 
  113.         test.assertHttpStatus(200,"跳转到应用分类页"); 
  114.         this.capture(path.capture+'打开应用分类.jpg',cap.clipRect, cap.imgOptions); 
  115.          
  116.     }); 
  117.     casper.withFrame(0,function(){ 
  118.         this.echo("切换到mian frame里"); 
  119.         casper.withFrame(1,function(){ 
  120.             this.echo("应用分类页面"
  121.             test.assertExists({type: 'xpath',path:category_list.x.表格},"表格检查"); 
  122.             test.assertExists(category_list.c.名称,"名称字段检查"); 
  123.             test.assertExists({type: 'xpath',path:category_list.x.海报},"海报字段检查"); 
  124.             test.assertExists({type: 'xpath',path:category_list.x.编辑},"编辑字段检查"); 
  125.         }); 
  126.     }); 
  127.     casper.run(function() { 
  128.         test.done(); 
  129.     }); 
  130. }); 

 


标签: casperjs
顶一下
(0)
0%
踩一下
(0)
0%

Google提供的广告