console.log non funziona con la valutazione di CasperJS con setTimeout

Perché quando uso console.log in evaluate , funziona:

 casper.then(function() { this.evaluate( function() { console.log('hello'); }); }); 

Ma questo non funziona:

 casper.then(function() { this.evaluate( function() { setTimeout( function() {console.log('hello');}, 1000); }); }); 

Perché stai mescolando casperjs e ambienti di pagine remote. La funzione di evaluate eseguirà il codice all’interno della pagina remota, quindi la chiamata a console.log non produrrà alcun risultato.

Se si desidera console.log chiamate remote.message remote , ascoltare l’evento remote.message :

 casper.on('remote.message', function(msg) { this.echo('remote message caught: ' + msg); }) 

A proposito, la documentazione per gli eventi è piuttosto esaustiva, oltre a quella per la valutazione .

@ La risposta di NiKo è fondamentale.

Suggerirei inoltre di aggiungere quanto segue, poiché se si verifica un errore, è ansible che non si riesca nemmeno a stampare abbastanza un file console.log (), e invece si concluda con il silenzio.

 casper.on( 'page.error', function (msg, trace) { this.echo( 'Error: ' + msg, 'ERROR' ); }); 

CasperJS include ClientUtils , che può essere utilizzato dalla pagina remota per accedere facilmente alla console dello script casper:

 __utils__.echo('This message is logged from the remote page to the CasperJS console'); 

Basandosi sulla risposta di @ odigity, questo fa sì che i casperj muoiano con un errore / stacktrace più familiare:

 var util = require('util'); casper.on('page.error', function exitWithError(msg, stack) { stack = stack.reduce(function (accum, frame) { return accum + util.format('\tat %s (%s:%d)\n', frame.function || '', frame.file, frame.line ); }, ''); this.die(['Client-side error', msg, stack].join('\n'), 1); });