2012-12-20 4 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이 지연된 실행 단계를 선언한다는 것입니다 이유. 코드 풀린다면 실제 코드는 다음과 같습니다.

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

그래서 self는'then'을 페이지 내에 중첩시키기 위해 사용할 키워드입니까? –

관련 문제