2012-05-19 3 views
1

javascript에 href가 첨부 된 앵커가있는 시스템에서 CasperJS를 테스트합니다. 일반적인 작업 수행href/Javascript로 앵커에 액세스

casper.then(function() { 
this.evaluate(function() { 
//  document.querySelector('a[id="CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH"]').click(); // works in FF 
// window.onload=submitAction_win0(document.win0,'CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH'); 

     //eval("submitAction_win0(document.win0,'CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH_1');"); 
//submitAction_win0(document.win0,'CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH'); 
// window.onload=submitAction_win0(document.win0,'CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH'); 

//  this.click('a[id="CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH"]'); 
//  click('a[id="CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH"]'); 
//  self.click('a[id="CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH"]'); 
//  this.this.click('a[id="CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH"]'); 
.. 

}); 

}); 

위의 방법 중 어느 것도 효과가 없습니다. 프로젝트에 대한 Git repos는 CasperUtils/ClientUtils 라이브러리에 href="javascript:foo()" 요소를 호출하는 클릭 방식 인 __utils__이있는 것으로 나타났습니다.

그러나이 실행 방법을 알아낼 수 없습니다.

누구든지 CasperJS를 사용하고 이것이 구현되는 방법에 대한 샘플 코드가있는 경우 감사하게 생각합니다. 당신은 내가 실행할 수있는 테스트 코드 케이스에 대한 포인터가있는 경우, 즉 우리가이 구현 될 예정이다 방법을 보자 것,

casper.then(function() { 
    e=document.querySelector("id['foo']"); 
    CasperUtilsSomething.click(e); 
}); 

또는 :

이상적으로는, 최종 결과는 뭔가 같이해야한다 .

+2

이러한 라이브러리를 사용하기 전에 튜토리얼을 더 잘 읽어야합니다. – Andreas

+0

Andreas. 안녕. 답장을 보내 주셔서 감사합니다. 그리고 이것을 구현하는 방법에 대한 모든 것을 읽으려고했습니다. 이것을 구현하는 방법을 안내하는 자습서에 대한 지식이 있습니까? 나는 youtube, GIT repos, 지원 포럼, 메일 링리스트 아카이브 등을 찾을 수 없었다. 당신이 생각할 수있는 다른 장소는 ?? 나는 마지막 도랑 문제로 여기로 돌 렸습니다. –

+0

"tom"(일명 bruce),이 튜토리얼 http://ejohn.org/apps/learn/을 참고하십시오. - 여기에 무슨 일이 일어나고 있는지 더 많이 이해할 것입니다. – NiKo

답변

1

여기서 문제는 기능 범위를 둘러싼 혼란이있는 것처럼 보입니다. 이것은 PhantomJS (CasperJS가 위에 구축 됨)에 대한 까다로운 작업입니다. 두 개의 완전히 다른 범위가 있는데, 하나는 PhantomJS 컨텍스트에서 실행되고 casper 개체에 액세스 할 수 있으며 "sandbox"범위는 원격입니다. 코드가 실행됩니다. 예를 들어 casper.evaluate()에서 실행되는 내용은 원격 컨텍스트의 샌드 박스에서 실행되며 casper 객체 또는 메서드에 액세스 할 수 없습니다. 실행중인 함수가 casper 인스턴스에 액세스 할 수 없습니다, 그리고 this가 브라우저에서 window 객체를 참조 -

그래서 casper.evaluate()this.click()가 실패 할 것입니다 전화하려고합니다.

일반적으로이 작업을 수행하려는 방법은 그냥 :

casper.then(function() { 
    casper.click('#CLASS_SRCH_WRK2_SSR_PB_CLASS_SRCH'); 
    casper.evaluate(function() { 
     // some function that needs to run after clicking 
    }); 
}); 

참고 또한 내가 아는 한, 당신은 일반적으로 casper.evaluate()의 모든 window.onload 코드를 실행할 수 없습니다 - 윈도우의 load 이벤트가 이미 것 코드를 실행할 때 해고되었습니다.

관련 문제