2016-08-09 2 views
0

나는 내 웹 사이트에 대한 테스트를하여 탐색 막대와 루프에서 모든 링크를 가져 와서 모든 페이지를 열어 작은 테스트를 실행하여 CasperJS를 배우고 있습니다 (제목, 검색 버튼 누르기, 결과가 다시 나타나는지 확인하기 등). 또한 다음 링크로 이동하기 전에 페이지 제목 만 확인하는 "빠른 테스트"플래그가 포함되었습니다. 총 25 개의 링크가 있습니다.Casperjs는 링크를 통해 루핑 속도를 늦추고 있습니다.

문제는 약 10 개의 전체 테스트 후에 스크립트가 멈추지 만 빠른 테스트에서는 제대로 작동한다는 것입니다.

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() 기능 그냥 간단하다 :

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

testPage() 페이지 특정 기능 모두가 같은 모양이 내가 각 페이지를 열고 사용하고 루프입니다

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 개의 타임 스탬프 사이에 코드가 건너 뛰거나 추가되지 않고 IE에서 페이지를로드하지 않으므로 혼란 스럽습니다. 거의 오랫동안.

링크를 통해 루핑 한 후 캐스퍼가 느려지는 이유는 무엇입니까?

+0

('임시 나는 다음을 추가하여 끝까지 모든 테스트를 얻기 위해 관리했습니다 ')를 세 가지 다른 방법으로 사용하고'testPage'에서'ths' 대신'casper'를 사용하면이 코드는 정상적으로 보입니다. 아마도 PhantomJS의 한계 일 것입니다. @ArtjomB. –

+0

로컬 인스턴스 (예 :'ths ')와 반대되는'casper '를 사용하는 것과 다른 점이 있습니까? –

+0

'casper'에 대한 전역 참조를 사용하는지 아니면 동일한 인스턴스에 대한 닫힌 참조를 사용하는지는 중요하지 않지만 개발자는 이상한 아이디어를 갖고 앞으로 행동을 변경할 수 있습니다. –

답변

1

this page에 비틀 거렸다. 이 프로세스의 어딘가에 메모리 누수가있는 것처럼 보입니다. Casperjs와 phantomjs에 대해서는 아직 익숙하지 않지만 루프에 this.open() 비트가 포함되어 있다고 생각합니다.

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

을 따라서 루프 코드의 시작이 지금과 같이 보인다 : 같은 전역 변수를 사용하는 것보다 다른

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