CasperJS实现自动化测试笔记(3)

CasperJS项目中方法的封装和调用问题,第二个遇到的workflow问题。

 

在其他代码中有几个方法,比如fun_A,fun_B,fun_C;

现在某个方法调用它们,有一个错误的示范:

casper.then(function(){

    this.echo("xxxx");

    this.wait(function(){
        this.echo("AAAA");
    })

    fun_a.call(this);
    fun_b.call(this, str1, str2);
    fun_c.call(this);

    this.waitForSelector('',
        function(){
            this.echo("BBBB"); 
        }, function(){

        }, 100); 

    this.wait(100, function(){
        this.echo("CCCC"); 
    }) 
})

 

这样调用,预期的workflow是:AAAA --> fun_a --> fun_b --> fun_c --> BBBB --> CCCC。

 

但是实际运行时,发现fun_a、fun_b、fun_c的执行顺序有些意外 ---我们可以认为这是CasperJS的一个bug!

为了避免这个问题,可以这样调用:

casper.then(function(){

    this.echo("xxxx");

    this.wait(function(){
        this.echo("AAAA");
    })

    this.waitForSelector('',
        function(){
            this.wait(100, fun_a.bind(this));
            this.wait(100, fun_b.bind(this));
            this.wait(100, fun_c.bind(this));
        }, function(){

        }, 100);

    this.wait(100,function(){
        this.echo("BBBB");    
    })

})

当然如果fun_b需要带参数的话,如上一篇文所说,得考虑使用闭包实现方法fun_b。

 

(网络上很少casperjs的实践,很多东西自己摸索,写法也许不够专业,欢迎批评指正),不胜感激之至!

 

posted @ 2014-09-14 22:23  FranklinYang  阅读(336)  评论(0)    收藏  举报