javascript - CasperJS/PhantomJS.entonces en do/while Loop no funciona
loops (1)
Hay diferentes posibilidades, si solo quieres repetir cosas estáticas, puedes usar casper.repeat () -> cómo tener un valor variable para casper.repeat
Si quieres hacer un tiempo con multipe y luego dentro y un punto de quiebre, igual tienes que usar una función recursiva por lo que sé. Aquí hay un ejemplo:
...
casper.then(function() {
loopValidConf.call(this, 0, 15);
});
casper.then(function() {
casper.test.assert(exists, ''true after 15 tries!'')
});
function loopValidConf(index, numTimes) {
if (exists === true || index >= numTimes) {
return;
}
casper.then(function() {
casper.reload(function() {
casper.echo("reset values");
});
casper.then(function() {
// set some values here
});
casper.then(function() {
casper.waitForSelector(".selector")
});
casper.then(function() {
if (casper.exists(''.targetSelector'')) {
exists = true;
casper.echo(''targetSelector exists!'');
} else {
casper.echo(''targetSelector doesnt exists, try it once more!'');
}
});
});
casper.then(function() {
loopValidConf.call(this, index + 1, numTimes);
});
}
...
Esto todavía no es el óptimo (podría causar problemas de memoria), pero funciona. :)
Algo como esto me pareció bastante lógico pero causó que el fantasma se volcara (eso es lo que se llama en el registro, pero no da información útil) ...
do {
casper.then(function() {
var targetFound = false;
links = this.evaluate(getLinks);
var searchResultsAr = [];
for (var link in links) {
searchResultsAr.push(links[link].replace(''/url?q='', '''').split(''&sa=U'')[0]);
}
for (var result in searchResultsAr) {
if (searchResultsAr[result] == target) {
targetFound = true;
casper.echo(targetFound);
break;
}
}
if(targetFound)
{
break;
}
});
}while(!targetFound);