2012-12-20 56 views
2

我正在嘗試使用CasperJS來自動化一些通常需要很多時間才能完成的步驟。基本上我需要登錄到我們的CMS,並檢查是否安裝了一些插件。如果他們只是更新他們,但如果他們不是,那麼創建它們。我設法通過插件列表登錄並進入頁面,但是我在這裏遇到了麻煩。這就是我需要做的,在僞代碼:CasperJS多次提交併評估爲for循環

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

試試這個:

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宣佈延期實施步驟。如果unwinded,你的代碼實際上做了以下內容:

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 

生成的代碼具有放入隊列中的所有步驟,所以他們在正確的順序執行。

+0

是的,這工作正常。從你的答案我明白,我的下一步也應該包裹在self.then()函數... – user253530

+0

@ user253530,是的,你是對的,我已經更新了答案。 – Stan

+0

so self是爲了在頁面中嵌套'then'而使用的關鍵字? –