2013-05-12 1 views
1

PHPUnit Selenium 테스트를 위해 PhantomJS를 브라우저로 사용하려고합니다.PHPUnit을 사용하는 Ghostdriver

Selenium을 그리드 모드로 설정하고 webdriver로 phantomjs를 시작하고 GhostDriver Readme처럼 그리드에 등록했습니다.

셀레늄 테스트를 실행할 때 알 수없는 명령 오류로 실패합니다. GhostDriver는 PHPUnit의 말을 이해하지 못합니다.

[ERROR - 2013-05-12T16:23:06.326Z] RouterReqHand - _handle - Thrown => { 
    "message": "Request => {\"headers\":{\"Accept\":\"*/*\",\"Connection\":\"Keep-Alive\",\"Content-Length\":\"85\",\"Content-Type\":\"application/x-www-form-urlencoded; charset=utf-8\",\"Host\":\"127.0.0.1:4444\"},\"httpVersion\":\"1.1\",\"method\":\"POST\",\"post\":\"cmd=getNewBrowserSession&1=phantomjs&2=https%3A%2F%2Ftest.testurl.com%2F&\",\"url\":\"/\",\"urlParsed\":{\"anchor\":\"\",\"query\":\"\",\"file\":\"\",\"directory\":\"/\",\"path\":\"/\",\"relative\":\"/\",\"port\":\"\",\"host\":\"\",\"password\":\"\",\"user\":\"\",\"userInfo\":\"\",\"authority\":\"\",\"protocol\":\"\",\"source\":\"/\",\"queryKey\":{},\"chunks\":[\"\"]}}", 
    "name": "Unknown Command", 
    "line": 87, 
    "sourceId": 139810136032448, 
    "sourceURL": ":/ghostdriver/request_handlers/router_request_handler.js", 
    "stack": "Unknown Command: Request => {\"headers\":{\"Accept\":\"*/*\",\"Connection\":\"Keep-Alive\",\"Content-Length\":\"85\",\"Content-Type\":\"application/x-www-form-urlencoded; charset=utf-8\",\"Host\":\"127.0.0.1:4444\"},\"httpVersion\":\"1.1\",\"method\":\"POST\",\"post\":\"cmd=getNewBrowserSession&1=phantomjs&2=https%3A%2F%2FFtest.testurl.com%2F&\",\"url\":\"/\",\"urlParsed\":{\"anchor\":\"\",\"query\":\"\",\"file\":\"\",\"directory\":\"/\",\"path\":\"/\",\"relative\":\"/\",\"port\":\"\",\"host\":\"\",\"password\":\"\",\"user\":\"\",\"userInfo\":\"\",\"authority\":\"\",\"protocol\":\"\",\"source\":\"/\",\"queryKey\":{},\"chunks\":[\"\"]}}\n at :/ghostdriver/request_handlers/router_request_handler.js:87", 
    "stackArray": [ 
    { 
     "sourceURL": ":/ghostdriver/request_handlers/router_request_handler.js", 
     "line": 87 
    } 
    ] 
} 

이 같은 질문은 질문하고 비난하는 phpunit을가 있다고 제안으로 GhostDriver site에 답이 폐쇄되었다. 그럴 수도 있겠지만, 나는 아직도이 일을하기에 더 가깝지 않습니다. 누구든지 그것을 고칠 수있는 아이디어가 있습니까?

답변

3

PHPUnit_Extensions_SeleniumTestCase 확장 테스트 클래스를 사용하고있는 것 같습니다. 대신 PHPUnit_Extensions_Selenium2TestCase을 사용하십시오.

불행히도, 그것은 이야기의 끝이 아닙니다. 기본 클래스를 바꿀 때 Selenium 관련 메서드의 구문이 변경됩니다.

일자 PHPUnit_Extensions_SeleniumTestCase 클래스

  • 브라우저
  • 로 Phantom.js를 지원하지 않는 셀레늄 RC의 API를 사용 as documented here
  • 이 코드를 잘 작동은 "전통적인"구문이 필요 Selenium IDE에서 생성되고 "Selenium IDE: PHP Formatters"플러그인을 사용하여 내보냈습니다. this test case 예하여 보여줍니다, 그것은이다 - 반면

, PHPUnit_Extensions_Selenium2TestCase

  • 잘 설명하지 않은 명령의 다른 세트가 필요합니다
  • 이 Phantom.js을 지원하는 WebDriver API를 사용하여 그것에 대해
  • 코드를 광범위하게 재 작성하지 않고 Selenium IDE에서 내 보낸 경우 작동하지 않습니다.

PhantomJS를 사용하면 PHPUnit 기반 Selenium 테스트를 더 빨리 실행할 수 있지만 비용은 많이 듭니다.

+0

감사합니다. 솔직히 말해서 Selenium이 더 이상 작년에 Firefox와 함께 작동하지 않는다는 사실에 대해서는 속도가 더 빠르며 그 이상이 아닙니다. 필사적으로 대안을 찾았습니다. 이 새로운 API에서 테스트를 다시 작성하는 것이 앞으로의 방법이라고 생각합니다. 감사. – Hippyjim

+1

FWIW, FF는 나를 위해 작동합니다. 저는 셀레늄을 처음 접했고 지난 주 전체 세방을 설정 했으므로 제 컴퓨터에는 기존 물건이 없습니다. 파이어 폭스는 IDE, 독립 실행 형 서버, 그리드 노드 ... Windows 호스트에서도 작동 함) – hashchange

+0

그래,하지만 파이어 폭스에는 계속해서 문제가 있으며 "죽은 객체에 액세스 할 수 없다"라는 오류가있다. 이 페이지는 JS의 모든 요소를 ​​생성/대체하는 JS에서 꽤 활성화되어 있습니다. 필자는 파이어 폭스 15 이후로 더 이상 죽지 않고 단일 웹 드라이버 테스트를 통과 할 수 없다. – Hippyjim