Casperjs - 有没有办法等待n秒?

时间:2016-05-30 09:55:10

标签: javascript casperjs

为了澄清,我不想等待一个条件,只需暂停n秒。这是我的代码,但是id没有按照我预期的方式工作,我的怀疑是"等待"是异步的。我希望更改代码,以便打印1,等待5秒,打印2,然后打印3.现在它打印1,打印3,然后等待5秒并打印2。

var casper = require('casper').create();

var x = require('casper').selectXPath;
var fs = require('fs');
var parsedFile = "pfile.txt";

casper.start();

function wait5seconds() {
   casper.wait(5000, function() {
        this.echo('2');
   });
}

casper.then(function() {
  this.echo('1');
  wait5seconds();  
  this.echo('3');
});

casper.run();

3 个答案:

答案 0 :(得分:5)

您应该将casper.wait()放在casper.then()内,如下所示:

casper.start();
casper.then(function(){
    echo('1');
});
casper.then(function(){
    casper.wait(5000, function(){echo('2')});
});
casper.then(function(){
    casper.wait(5000, function(){echo('3')});
});

答案 1 :(得分:3)

不,没有办法在CasperJS中同步等待。您使用的任何wait*都应该跟随另一个步骤函数(then*wait*函数)。由于casper.echo(s)是同步的,因此会立即执行。

当然,您可以定义自己的thenEcho

casper.thenEcho = function(s){
    this.then(function(){
        this.echo(s);
    });
};

并像这样使用它:

casper.then(function() {
    this.thenEcho('1');
    wait5seconds();  
    this.thenEcho('3');
});

答案 2 :(得分:1)

这是我最终使用的,它会阻止代码执行N秒。

casper.then(function() {
    this.thenEcho('1');
    waitNseconds(5);  
    this.thenEcho('2');
    this.thenEcho('3');
});

然后我称之为:

<i class="fa fa-bar-chart" aria-hidden="true"></i> //same html

打印1,等待5秒,打印2,然后打印3。