setInterval and this.wait in casper.js

前端 未结 1 840
南笙
南笙 2021-02-06 14:55

I need to make a loop of 3 times and 2 seconds in between each iteration. I tried these 3 options:

Option 1

var casper          


        
1条回答
  •  孤街浪徒
    2021-02-06 15:05

    Here's a sample implementation to solve your problem:

    var casper = require('casper').create();
    var last, list = [0, 1, 2, 3];
    
    casper.start("http://google.fr/", function() {
        this.echo('google');
    });
    
    casper.on('remote.message', function(msg) {
        this.echo('remote message caught: ' + msg);
    });
    
    casper.thenEvaluate(function() {
        window.x = 0;
        var intervalID = setInterval(function() {
           console.log("Using setInternal " + window.x);
           if (++window.x === 3) {
               window.clearInterval(intervalID);
           }
        }, 500);
    });
    
    casper.each(list, function(self, i) {
        self.wait(500, function() {
            last = i;
            this.echo('Using this.wait ' + i);
        });
    });
    
    casper.waitFor(function() {
        return last === list[list.length - 1] && 3 === this.getGlobal('x');
    }, function() {
        this.echo('All done.').exit();
    });
    
    casper.run(function() {});
    

    Sample output:

    $ casperjs test.js
    google
    remote message caught: Using setInternal 0
    Using this.wait 0
    remote message caught: Using setInternal 1
    Using this.wait 1
    remote message caught: Using setInternal 2
    Using this.wait 2
    Using this.wait 3
    All done.
    $
    

    0 讨论(0)
提交回复
热议问题