Ich versuche zu verstehen, wie CasperJS arbeiten, um es bei meinen Tests zu verwenden. Was ich versuche zu erreichen, ist einen Screenshot von einem Element der Seite zu machen, wenn sie fertig und voll geladen sind, ich benutze Whatsapp Web als ein Beispiel dafür, dass es das Laden hat, nach dem ich suche.CasperJS waitFor *() hat sehr unklar Verhalten
Diese meine Implementierung ist:
var casper = require('casper').create({
remoteScripts: [
'http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js',
'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.6.1/lodash.js'
],
pageSettings: {
userAgent: 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.1500.71 Safari/537.36'
},
viewport: {
width: 1280,
height: 1024
},
waitTimeout: 60000,
logLevel: 'debug',
verbose: true
});
casper.start('https://web.whatsapp.com/', function(){
this.echo('Starting...')
this.waitForSelector('.qrcode', function() {
this.captureSelector('whatsapp.png', 'html');
this.echo('Screeshot Taken!')
});
});
casper.run();
Es scheint, dass CasperJS nicht <div class="qrcode"></div>
in die Seite in 60er Jahren finden, das ist recht lange Zeit. Was fehlt mir hier? Was sollte waitFor *() tun?
INFO: PhantomJS v2.0.0
HINWEIS: was ich sagen kann, ist eigentlich, dass sieht aus wie das waitForSelector()
Werke async, und ich frage mich, warum eine wait() Funktion haben wie das umgesetzt werden, was Ich erwarte, dass etwas wie ein Watcher (oder eine Endlosschleife) das DOM fortlaufend holt und das Element mit diesem Selektor in einer bestimmten Zeit überprüft.
Welche PhantomJS-Version verwenden Sie? Bitte registrieren Sie sich für die Ereignisse 'resource.error',' page.error', 'remote.message' und' casper.page.onResourceTimeout' ([Beispiel] (https://gist.github.com/artjomb/4cf43d16ce50d8674fdf#file) -2_caspererrors-js)). Vielleicht gibt es Fehler. PhantomJS 2.x ist dafür bekannt, einige Fehler zu verstecken, also sollten Sie auch 1.9.8 versuchen. –
Ihr Code sieht gut aus. Haben Sie nach einem kurzen Warten einen Screenshot gemacht, um zu sehen, ob die Seite zumindest geladen ist? Warum laden Sie Remote-Skripte? Eine solche alte Version von jQuery könnte der Schuldige sein. –
Vielen Dank für Ihre Antwort @ArtjomB. Ich bin so mit diesem Thema beschäftigt. Ich werde meine Frage mit den Informationen aktualisieren, die Sie verlangten, und ich versuche, auf 1.9.8 herabzustufen, ich lud Remoteskripte gerade weil schneller war, das auch behebt, ich lasse Sie wissen, wenn es löst. –