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 = require('casper').create({
verbose: false,
logLevel: 'debug'
});
casper.start("http://google.com");
casper.on('remote.message', function(msg) {
this.echo('remote message caught: ' + msg);
})
casper.thenEvaluate(function() {
var x = 0;
var intervalID = setInterval(function () {
console.log("Using setInternal " + x);
if (++x === 3) {
window.clearInterval(intervalID);
}
}, 2000);
});
casper.run();
Observation: Nothing appeared because the script ended right away before the first setInterval being called.
Option 2
Replaced thenEvaluate() with then() below
for (i=0; i<3; i++) {
this.wait(2000);
this.echo('Using this.wait ' + i);
}
Observation: It outputs 3 times right away and then a long wait since this.wait() is async. This is not what I want because I want a delay in between.
Option 3
Replace the part in then() with this below. I was thinking about doing a recursive call to waitFunc() after each wait() being called.
var count = 0;
var waitFunc = function() {
this.wait(2000, function() {
if (count < 3) {
casper.echo('Using this.wait ' + count);
count++;
waitFunc();
}
});
};
Observation: Nothing printed out on the screen.
So my question is: How to make this.wait or setInterval works in a loop of 3 times like this case?
Here’s a sample implementation to solve your problem:
Sample output: