2

私はCasperJSを使用して、通常は多くの時間を必要とするいくつかのステップを自動化しようとしています。基本的に、CMSにログインして、いくつかのプラグインがインストールされているかどうかを確認する必要があります。それらが更新されている場合は更新しますが、そうでない場合は作成します。ログインしてプラグインのリストが表示されたページにアクセスできましたが、ここで問題が発生しました。これが私が擬似コードで行う必要があることです:

for every plugin defined in my config file
    populate the search plugins form and submit it
    evaluate if the response contains my plugin

これがコードです

casper.thenOpen(snippetsUrl, function() {
    console.log(colorizer.colorize("###############PROCESSING SNIPPETS###################", 'ERROR'));
    this.capture('snippets.png');

    this.each(Config.snippets.station, function(self, snippet) {
        self.fill('form[id="changelist-search"]', {q: snippet.name}, true);
        self.then(function() {
            this.capture(snippet.name + '.png');
        })
    });
});

フォームが連続して複数回送信され、「その後」のステップで同じページを複数回キャプチャすることになります...これを解決するにはどうすればよいですか?

4

1 に答える 1

4

これを試して:

this.each(Config.snippets.station, function(self, snippet)
{
    self.then(function()
    {
        this.fill('form[id="changelist-search"]', {q: snippet.name}, true);
    });
    self.then(function()
    {
        this.capture(snippet.name + '.png');
    })
});

最初のコードが機能しなかった理由は、Capserのthen宣言が遅延実行ステップを宣言しているためです。巻き戻された場合、コードは実際には次のことを行いました。

submit form 1
place capture 1 into a queue
submit form 2
place capture 2 into a queue
submit form 3
place capture 3 into a queue
// then execute the queue
capture 1
capture 2
caprure 3

結果のコードでは、すべてのステップがキューに入れられるため、適切な順序で実行されます。

于 2012-12-20T18:04:53.467 に答える