2015-02-02 4 views
3

웹 사이트에서 로그인 버튼을 테스트하기위한 매우 간단한 CasperJS 스크립트를 작성하려고합니다. 클릭 이벤트 후 웹 사이트 상단에 모달 창이 열리고 로그인 필드를 채울 수 있습니다.CasperJS 클릭이 모달 창을 표시하지 못합니다.

이 웹 사이트를 사용하면 매우 효과적입니다. casperjs test my-script-file --engine=slimerjs을 사용하면 완벽하게 정상적으로 작동합니다. slimerjs가 없으면 코드가 실패합니다.

은 버튼을 정의하는 방법 :

<button class="btn btn-strong-submit" data-action="join">Join</button> 
내 시험

: 웹 사이트가 작동하는 방식이이기 때문에

웹 사이트에
casper.test.begin('testing', 3, function suite(test) 
{ 
    casper.start(); 
    casper.thenOpen("http://the-website-to-test-url", function() 
    { 
     casper.wait(5000, function(){ 
      casper.thenClick("button.btn.btn-strong-submit"); 
     }); 
    }); 

    casper.then(function() { 
     casper.wait(3000); 
     casper.capture("screen.png"); 
    }); 

    casper.then(function(){ 
     casper.assertVisible("div.join_container"); 
    }); 

    casper.run(function() 
    { 
     test.done(); 
    }) 
}); 

이 버튼을 클릭하면 http://the-website-to-test-url.com/#join로 이동합니다은 클릭을 기다립니다 catch는 jQuery를 사용하여 [data-action], forms # [data-action]을 찾은 다음 그런 식으로 URL을 작성합니다.

하지만 CasperJS는 jQuery에서 배경으로 잡히는 클릭을 이해하지 못하는 것 같습니다. 어떤 아이디어? 터미널 출력에

업데이트 : Artjom의 코멘트에 확장

[info] [phantom] Starting... 
[info] [phantom] Running suite: 4 steps 
[debug] [phantom] opening url: http://www.MYURL.com/, HTTP GET 
[debug] [phantom] Navigation requested: url=http://www.MYURL.com/, type=Other, willNavigate=true, isMainFrame=true 
[debug] [phantom] url changed to "http://www.MYURL.com/" 
[debug] [phantom] Successfully injected Casper client-side utilities 
[info] [phantom] Step anonymous 2/4 http://www.MYURL.com/ (HTTP 200) 
[info] [phantom] Step anonymous 2/4: done in 721ms. 
[info] [phantom] Step anonymous 3/4 http://www.MYURL.com/ (HTTP 200) 
[info] [phantom] Step anonymous 3/4: done in 731ms. 
[info] [phantom] Step _step 4/5 http://www.MYURL.com/ (HTTP 200) 
[info] [phantom] Step _step 4/5: done in 752ms. 
[info] [phantom] wait() finished waiting for 5000ms. 
[debug] [phantom] Mouse event 'mousedown' on selector: .btn.btn-strong-submit 
[debug] [phantom] Mouse event 'mouseup' on selector: .btn.btn-strong-submit 
[debug] [phantom] Mouse event 'click' on selector: .btn.btn-strong-submit 
[info] [phantom] Step anonymous 5/5 http://www.MYURL.com/ (HTTP 200) 

//After click URL should have changed to http://www.MYURL.com/#login 

[info] [phantom] Step anonymous 5/5: done in 5772ms. 
[info] [phantom] Step _step 6/6 http://www.MYURL/ (HTTP 200) 
[info] [phantom] Step _step 6/6: done in 5792ms. 
[info] [phantom] wait() finished waiting for 3000ms. 
[debug] [phantom] Capturing page to /home/TEMP/screen.png 
[info] [phantom] Capture saved to /home/TEMP/screen.png 
[info] [phantom] Done 6 steps in 9367ms 
+0

따라서 스크립트는 SlimerJS에서 작동하지만 PhantomJS에서는 작동하지 않습니까? 그게 무슨 뜻 이니? 어떻게 작동하지 않는지 어떻게 확인합니까? –

+0

잘 slimerjs와 나는 그것을 볼 수 있지만 casperjs/phantomjs assertVisible 함께 실패합니다. 죄송합니다. 너무 많은 시련 끝에 코드에서 제거했습니다. 다시 코드를 삽입하는 것을 잊었습니다. – teodr

+0

그리고 나는 5000을 기다린 후에도 스크린 샷을 캡처하려고 시도했지만 아무 것도 볼 수 없습니다. – teodr

답변

0

, 나는 당신이 변화해야한다고 생각 :

casper.then(function() { 
    casper.wait(3000); 
    casper.capture("screen.png"); 
}); 

가 될 :이 조금 더

casper.wait(3000, function() { 
    casper.capture("screen.png"); 
}); 

설명 적이며 단순한 것은 아닙니다 : "3000ms 기다린 후 ...".

(제외 : casper.then(doSomething)casper.wait(0, doSomething) 같은 일입니다.)

참고 :이 방법의 단점은 그것이 당신의 단위 테스트에 3 초 지연을 추가합니다.

casper.waitUntilVisible('div.join_container', { 
    casper.capture("screen.png"); 
}); 

다음과 같이 표시되면 곧바로 스크린 샷을 찍은 다음 다음 단계로 진행합니다. 이런 식의 단점은 당신의 주장이 항상 인 것입니다.이 작동합니다; 문제가 발생하면 테스트 실패 대신 시간 초과가 발생합니다. (그럴 수도 중요하지 않을 수도 있습니다. 테스트 대상에 따라 다르며 이유는 무엇입니까?)

+0

casperjs test my-test-file.js의 터미널 출력으로 내 질문을 업데이트했습니다. – teodr