`

CasperJS有什么作用呢?(转)

 
阅读更多

http://www.cnblogs.com/ziyunfei/archive/2012/09/27/2706254.html

 

CasperJS是一个开源的,用JavaScript编写的,基于PhantomJS的导航脚本和测试工具 ,它简化了定义一个完成的导航操作所需的步骤,还提供了很有用的函数封装,方法,和语法糖,它可以完成下面这些常见任务:

 

定义 & 排序浏览器导航步骤

填充 & 提交表单

点击 & 跟踪链接

捕获网页截图 (还可以截取某一区域)

在远程DOM上进行断言测试

记录事件

下载资源,包括二进制文件

编写功能测试套件,结果保存为JUnit XML文件

抓取网页内容

进行导航操作

 

如果你在PhantomJS脚本中使用链式回调来进行导航操作,那是相当痛苦的.这种代码无论写起来,读起来,理解起来还是维护起来,都是噩梦:

 

var page = require('webpage').create();             //新建一个页面

page.open(url1, function(status) {                  //导航到第一个URL

    if (status == "fail") phantom.exit();           //如果发生错误,退出程序

    page.open(url2, function(status) {              //否则在页面加载完成的回调函数中继续导航到第二个URL,依次类推

        if (status == "fail") phantom.exit();

        page.open(url3, function(status) {

            if (status == "fail") phantom.exit();

            page.open(url4, function(status) {

                if (status == "fail") phantom.exit();

                // 我可以停下来了吗?

            });

        });

    });

});

CasperJS使用更方便的API解决了这种异步操作的问题:

 

var casper = require('casper').create();           //新建一个页面

 

casper.start(url1);                                //添加第一个URL

casper.thenOpen(url2);                             //添加第二个URL,依次类推

casper.thenOpen(url3);

casper.thenOpen(url4);

 

casper.run();                                      //开始导航

想要模拟用户通过点击链接来进行导航操作吗?没问题:

 

var casper = require("casper").create()                       //新建一个页面

casper.start('http://my.blog.tld/');                          //添加第一个URL

casper.thenClick('nav#menu a.blog');                          //在页面加载完成后,点击选择器指定的链接,进入一个新页面

casper.thenClick('.posts li a');                              //在新页面加载完成后,再次点击一个选择器指定的链接

casper.then(function() {                                      //在第二个新页面加载完成后,输出一些信息到控制台中

    this.echo('Page url is ' + this.getCurrentUrl());

    this.echo('Page title is ' + this.getTitle());

});

 

casper.run();                                                 //开始导航

你还可以使用coffeescript来编写如上功能的脚本:

 

var casper = require("casper").create()

casper.start "http://my.blog.tld/"

casper.thenClick "nav#menu a.blog"

casper.thenClick ".posts li a"

casper.then ->

    @echo "Page url is #{@getCurrentUrl()}"

    @echo "Page title is #{@getTitle()}"

casper.run()

填充和处理表单

 

填充和提交表单也并不难:

 

casper.start('http://admin.domain.tld/login/', function() {               //打开页面,并指定一个回调函数

    this.fill('form[id="login-form"]', {                                  //定位到一个form中

        'username': 'chuck',                                              //给name为username的表单控件填充值'chuck'

        'password': 'n0rr1s'                                              //给name为password的表单控件填充值'n0rr1s'

    }, true);                                                             //参数true,表示填充完毕后,立刻提交表单

});

 

casper.then(function() {

    this.echo(this.getTitle());                                           //新页面加载完成后,在控制台输出页面标题

});

 

casper.run();                                                             //开始导航

页面截图

 

给页面上指定的区域截图非常简单:

 

casper.start('http://domain.tld/page.html', function() {

    this.captureSelector('capture.png', '.article-content');                   //给页面中'.article-content'选择器匹配的元素截图,输出图片文件名为cpature.png,目录为当前目录

});

 

casper.run();

异步渲染页面

 

有时(好吧,其实是经常),很多页面内容是通过Ajax或者其他的手段异步加载的.你可以等到某个元素出现时再执行想要的操作:

 

casper.start('https://twitter.com/casperjs_org', function() {

    this.waitForSelector('.tweet-row', function() {                  //等到'.tweet-row'选择器匹配的元素出现时再执行回调函数

        this.captureSelector('twitter.png', 'html');                 //成功时调用的函数,给整个页面截图

    }, function() {

        this.die('Timeout reached. Fail whale?').exit();             //失败时调用的函数,输出一个消息,并退出

    }, 2000);                                                        //超时时间,两秒钟后指定的选择器还没出现,就算失败 

});

测试

 

除了上面讲的这些功能之外,CasperJS真正的威力是它提供了功能测试的能力.例如,测试谷歌的搜索操作可以这样完成:

 

casper.start('http://www.google.fr/', function() {                                          //打开谷歌主页,添加页面加载完成时的回调函数

    this.test.assertTitle('Google', 'google homepage title is the one expected');           //检测页面标题是否是'Google',如果是,输出第二个参数指定的字符串

    this.test.assertExists('form[action="/search"]', 'main form is found');                 //检测页面中是否存在选择器指定的元素,如果存在输出第二个参数指定的字符串

    this.fill('form[action="/search"]', {                                                   //填充表单并提交,执行搜索操作

        q: 'foo'

    }, true);

});

 

casper.then(function() {

    this.test.assertTitle('foo - Recherche Google', 'google title is ok');                  //检测搜索结果页的页面标题是否正确    

    this.test.assertUrlMatch(/q=foo/, 'search term has been submitted');                    //检测搜索结果页的网址是否匹配指定的正则表达式

    this.test.assertEval(function() {

        return __utils__.findAll('h3.r').length >= 10;                                      //自定义一个检测函数

    }, 'google search for "foo" retrieves 10 or more results');

});

 

casper.run(function() {

    this.test.renderResults(true);                                                          //输出检测结果

});

运行上面的脚本会产生这样的结果:

 

 

 

输出结果还能导出为XUnit XML文件,可以用在持续集成服务器中,比如Jenkins.

 

对于记录来说,整个CasperJS测试套件使用自己的API写成,结果在visible on Travis-CI.

分享到:
评论

相关推荐

    casperjs.pdf

    安装CasperJS通常有几种方式,比如使用Homebrew在OS X上安装,通过npm(Node.js包管理器)安装,或者从Git仓库克隆源码。文档还提供了从归档文件安装以及在Windows系统上的安装指南。安装后,文档还列举了一些已知的...

    casperjs1.1.0-beta3.jar

    7. **社区支持**:CasperJS有一个活跃的社区,提供丰富的教程、示例代码和插件,便于学习和解决问题。 8. **版本更新**:1.1.0-beta3是CasperJS的一个早期版本,可能不包含最新特性或修复的bug。开发者应关注...

    casperjs网页截屏例子

    CasperJS是一个基于PhantomJS和SlimerJS的高级脚本框架,专为网页自动化、测试和屏幕...在实践中,你可能会遇到一些特定的挑战,如处理异步操作、处理JavaScript重定向等,但有了CasperJS,这些问题都将变得相对简单。

    casperjs-1.1.3.zip

    CasperJS是一个基于PhantomJS和SlimerJS的高级脚本接口,专为网页抓取和自动化测试设计。它提供了一种简洁的方式来导航、交互和测试网页,特别适合处理那些依赖JavaScript来呈现内容的网站。在本文中,我们将深入...

    casperjs抓取淘宝手机信息

    casperjs抓取淘宝手机信息实例

    casperjs-1.1.4-1.zip

    CasperJS是一个基于PhantomJS和SlimerJS的高级脚本接口,用于浏览器自动化和功能测试。这个"casperjs-1.1.4-1.zip"文件包含了CasperJS的1.1.4-1版本,这是一款非常有用的工具,尤其对于前端开发者和自动化测试工程师...

    Linux版本casperjs,抓取js加载的页面

    这需要对Java的进程管理有深入了解,确保正确处理标准输出和错误输出。 ```java Process process = Runtime.getRuntime().exec("casperjs script.js"); BufferedReader reader = new BufferedReader(new ...

    PyPI 官网下载 | webtest-casperjs-0.1.tar.gz

    标题中的“PyPI 官网下载 | webtest-casperjs-0.1.tar.gz”表明这是一个从Python Package Index(PyPI)官方下载的软件包,名为`webtest-casperjs`,版本为0.1,格式为tar.gz压缩文件。PyPI是Python开发者发布和分享...

    phantomjs和casperjs下载地址.zip

    CasperJs 是一个基于 PhantomJs 的工具,其比起 PhantomJs 可以更加方便的进行 navigation。 推荐使用PhantomJs1.9版本的 phantomjs和casperjs下载地址,casperjs下载地址,phantomjs下载地址

    php-casperjs, CasperJS的简单PHP包装.zip

    php-casperjs, CasperJS的简单PHP包装 php PHP是一个简单的PHP包装器,用于设计用于对网页进行用户测试的精细库 CasperJS 。它很容易集成到PHPUnit测试用例中。使webcrawler从未如此容易 !安装在使用php之前,你...

    casperjs +phantomjs 爬虫抓包插件

    利用casperjs +phantomjs实现登录抓取网页 并且截图;下载后解压后,在环境变量path中配置解压后bin目录的地址,如:E:\Program Files\casperjs\bin;E:\Program Files\phantomjs\bin

    phantomjs&casperjs

    PhantomJS和CasperJS是两个非常重要的工具,它们在Web自动化测试和无头浏览器场景中扮演着关键角色。这两个工具都是基于WebKit浏览器引擎,但各自有着不同的功能和用途。 PhantomJS是一款开源的无头浏览器,它允许...

    CasperJS 离线帮助手册(html格式)

    CasperJS是一个开源的,用JavaScript编写的,基于PhantomJS的导航脚本和测试工具 ,它简化了定义一个完成的导航操作所需的步骤,还提供了很有用的函数封装,方法,和语法糖,它可以完成下面这些常见任务: 定义 & 排序...

    casperjs-scraper:用CasperJS刮取

    CasperJS + PhantomJS的无头抓取 入门 您必须已全局安装npm , casperjs , phantomjs apt-get install npm npm install -g phantomjs npm install -g casperjs cd到项目根目录然后运行 npm install grunt ...

    casperjs抓取简单实例

    "casperjs抓取简单实例" 指的是使用CasperJS库进行网页抓取的一个基础应用示例。CasperJS是一个基于PhantomJS或SlimerJS的高级脚本接口,用于导航、测试和截图网页。在这个实例中,它被用来抓取特定输入内容(可能是...

    docker-casperjs:用于casperjs容器的Docker回购

    docker run -v `pwd`/casperjs-files:/home/casperjs-files fprieur/docker-casperjs casperjs /home/casperjs-files/sample.js 截屏 docker run -v `pwd`/casperjs-files:/home/casperjs-files fprieur/docker-...

    casperjs:使用 PhantomJs 和 CasperJs 测试 Web 应用程序

    **卡斯帕杰斯(CasperJS):PhantomJS 和 CasperJS 在 Web 应用测试中的应用** 在 IT 领域,自动化测试是提高效率和保证产品质量的重要手段,尤其是在 Web 开发中。卡斯帕杰斯(CasperJS)是一个用于编写功能和验收...

    casperjs_biztest.rar

    CasperJS是一个强大的工具,专为网页导航脚本和自动化测试设计,它是基于另一个开源项目PhantomJS构建的。PhantomJS是一个无头浏览器,意味着它可以在后台运行,没有图形用户界面,这对于自动化任务和服务器端渲染...

    casperjs2.0

    CasperJS是一个基于PhantomJS和SlimerJS的高级脚本接口,用于浏览器自动化和页面测试。它提供了强大的工具来导航、操作和检查网页内容,主要用于进行功能测试和UI验收测试。CasperJS 2.0是其最新的版本,带来了许多...

    CasperJS-test:玩转 CasperJS

    CasperJS 是一个基于 PhantomJS 的高级脚本框架,用于编写功能性和接受性测试,尤其在Web自动化方面表现强大。它提供了丰富的API,使开发者能够方便地模拟用户交互,如点击、滚动、填写表单等。CasperJS是用...

Global site tag (gtag.js) - Google Analytics