2016-03-21 15 views
-1

CasperJS'nin testlerimde kullanmak için nasıl çalıştığını anlamaya çalışıyorum. Hazırlamaya çalıştığım şey, sayfanın bir sayfasının bir ekran görüntüsünü hazır ve tam yüklendiğinde çekmektir, örnek olarak Whatsapp Web kullanıyorum çünkü aradığım yükleme var.CasperJS waitFor *() çok belirsiz bir davranışı var

Bu benim uygulamasıdır:

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(); 

CasperJS 60'lı yıllarda sayfasına <div class="qrcode"></div> bulamazsınız o görünüyor, oldukça uzun bir süre. Burada neleri eksik? Ne waitFor *() yapmak için varsayalım?

BİLGİ: PhantomJS v2.0.0

NOT: Anladığım kadarıyla, aslında o waitForSelector() eserler zaman uyumsuz gibi görünüyor ve merak ediyorum bir bekleme() fonksiyonu böyle uygulanacak neden, ne Beklediğim gibi, sürekli olarak DOM'ı getirecek olan bir izleyici (veya sonsuz bir döngü) gibi bir şey ve bu seçiciyle öğeyi belirli bir süre içinde kontrol et.

+0

Hangi PhantomJS sürümünü kullanıyorsunuz? Lütfen "resource.error", "page.error", "remote.message" ve "casper.page.onResourceTimeout" etkinliklerine kayıt olun ([Örnek] (https://gist.github.com/artjomb/4cf43d16ce50d8674fdf#file -2_caspererrors-js)). Belki de hatalar vardır. PhantomJS 2.x'in bazı hataları gizlediği biliniyor, dolayısıyla 1.9.8'i de denemelisiniz. –

+0

Sizin kodunuz güzel görünüyor. Sayfanın en az yüklendiğini görmek için biraz bekledikten sonra ekran görüntüsü aldınız mı? Uzaktan komut dosyalarını neden yüklüyorsunuz? JQuery'nin böyle eski bir sürümü suçlu olabilir. –

+0

Cevabınız için teşekkürler @ArtjomB. Bu yüzden çok şaşırdım. Sorduğum bilgiyi sordum ve 1.9.8'e düşürmeye çalışıyorum, sadece daha hızlı olduğu için komut dosyalarını yüklüyordum, düzelt, çözüp çözemeyeceğimi sana bildireyim. –

cevap

0

Sonunda anladım! Bu bir sürüm sorunu sadece ben ne yaptık PhantomJS ne de CasperJS

aslında yüklemek için brew kullanmaktan kaçının oldu:

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

Ve beklendiği gibi şimdi benim kod çalışır. Bu hata aslında bu hataya neden olur PhantomJS ait v1.9.8 ile ilgilidir: Eğer OSX üzerinde ise, UÖM'yi kullanarak yeniden ve sadece iyi çalışır

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.

. Umarım yardımcı olacaktır.

+0

QR kodunu şimdi yakalayabiliyor musunuz? bakan ** eksik = cryptoSha256, cryptoAesCbc ** – snofty

+1

@snofty Aslında bir şey değiştiğinde bilmiyorum, testlerimde evet: https://github.com/nerder/whosup/blob/master/whosapp.js Bu son koddu (kalite için üzgünüm sadece 04fun) –