2016-08-09 15 views
0

私は、すべてのリンクを開いて各ページの小さなテストを実行することで、ナビゲーションバーとループからのすべてのリンクをつかむ私のウェブサイトのテストを行うことでCasperJSを学んでいます(タイトル、検索ボタンを押す、結果が戻ってくるかどうかなどを確認してください)。私はまた、次のリンクに移動する前にページタイトルをチェックするだけの "クイックテスト"フラグを含んでいました。合計約25のリンクがあります。Casperjsがリンクのループをスローダウン

問題は、約10回の完全なテストの後に何らかの形でスクリプトが停止してしまいますが、クイックテストで問題なく動作します。これは私が各ページを開くために使用していたループです:testPage()、ページの特定の機能がすべてのようになり

casper.each(linkList, function(self, link){ 
    self.thenOpen(link, function(){ 
     self.echo(link); 
     temp = Date.now(); 
     this.open(urlPrefix + link); 
     this.then(function(){ 
      temp = (Date.now()) - temp; 
      self.echo("Load time: "+temp.toString()+"ms"); 
      switch(link){ 
       //case statements for specific pages 
       // - run specialized versions of testPage() 
       case "Example": 
        testExample(this); 
        break; 
       default: 
        testPage(this); 
        break; 
      } 
     }); 
    }); 
}); 

function testPage(ths){ 
    checkTitle(ths, "Page Title"); 
    if(quickTest) 
     return; 

    ths.click('#searchButton'); 

    casper.waitForSelectorTextChange("#results",function(){ 
     temp = ths.evaluate(function(){ 
      return $("tr.row").length; 
     }); 
     if(temp>0) 
      casper.echo("Results returned"); 
     else 
      casper.echo("No results returned"); 
    }); 
} 

checkTitle()機能はただ単純です:

function checkTitle(ths, name){ 
    temp = ths.getTitle(); 
    casper.echo("Page Title: "+temp+" - App loads: "+(temp==name ? "PASSED" : "FAILURE")); 
} 

quickTesttrueの場合、ループは終了し、問題はありません。 quickTestfalseの場合、ループは12ページ目に無期限にハングします。偶然、11番目のページは文字通り同じページで、検索フィルタのオプションが増えました。さらに、私のcasperjsスクリプトは、quickTest=falseでロードするページ13410msと、quickTest=trueで460msしかロードできないことを伝えています。これは、2つのタイムスタンプの間のコードがスキップされている/そのフラグから追加され、それほど長い。

リンク経由でキャスパーの速度が低下するのはなぜですか?

+0

')を3つの異なる方法で使用し、' testPage'に 'ths'の代わりに' casper'を使用すると、このコードは正常に見えます。おそらくこれはPhantomJSの制限です。 @ArtjomB。 –

+0

ローカルインスタンス( 'ths')とは対照的に' casper'を使うことに違いがありますか? –

+0

'casper'へのグローバルリファレンスを使用するのか、同じインスタンスへのクローズドリファレンスを使用するのかは関係ありませんが、開発者は奇妙なアイデアを持ち、今後その動作を変更する可能性があります。 –

答えて

1

私はthis pageにつまずくことができました。このプロセスのどこかにメモリリークがあるようです。私はまだcasperjsとphantomjsに慣れていませんが、私はそれがループのthis.open()ビットを含むと推測します。私はすべてのテストには、以下を追加して仕上げるために得ることができた:

casper.page.close(); 
casper.page = casper.newPage(); 

だから、ループコードの始まりは、今のようになります。

同じグローバル変数( `TEMPを使用するよりも他の
casper.each(linkList, function(self, link){ 
    self.thenOpen(link, function(){ 
     self.echo(link); 
     casper.page.close(); 
     casper.page = casper.newPage(); 
     temp = Date.now(); 
     this.open(urlPrefix + link); 
     ...... 
関連する問題