2016-03-21 11 views
-1

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.

+0

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. –

+0

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. –

+0

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. –

Antwort

0

Endlich habe ich es! Es war nur eine Version Problem vermeiden brew mit PhantomJS noch CasperJS

zu installieren Was ich eigentlich tat, war:

  • brew uninstall phantomjs && brew uninstall casperjs
  • npm i -g phantomjs && npm i -g casperjs

Und jetzt mein Code wie erwartet. Dieser Fehler ist eigentlich auf v1.9.8 von PhantomJS bezogen, die diesen Fehler auslösen:

Unsafe JavaScript attempt to access frame with URL about:blank from frame with URL file:///usr/local/Cellar/casperjs/1.1-beta3/libexec/bin/bootstrap.js. Domains, protocols and ports must match.

Wenn Sie auf OSX sind, installieren Sie npm mit und wird gut funktionieren. Hoffe, es wird helfen.

+0

Kannst du QR-Code jetzt erfassen? facing ** missing = cryptoSha256, cryptoAesCbc ** – snofty

+1

@snofty ich weiß eigentlich nicht, ob sich etwas ändert, zum Zeitpunkt meiner Tests ja: https://github.com/nerder/whosup/blob/master/whosapp.js Dies war der endgültige Code (sorry für die Qualität war just4fun) –