2011-08-16 14 views
1

최근에 상당히 복잡한 프로젝트에서 셀레늄 1 테스트를 많이 작성했습니다. 그들은 모두 PHP로 작성되었으며 셀렌 서버 1.0.7에서 부드럽게 실행됩니다.PHPUnit 테스트에서 Selenium Grid 2 사용하기

분명히 firefox 5 (및 오늘 발표 된 6)에서는 셀렌 서버 1.0.7이 더 이상 작동하지 않습니다. 시도했지만 서버가 빈 창이 열리고 있습니다.

이제 셀레늄 그리드에서 테스트를 실행하려고합니다. 나는 그리드 v1을 사용하여 허브와 두개의 원격 컨트롤 runnnig를 얻을 수 있었지만 이전 서버처럼 빈 윈도우를 열었다. 그래서 나는 그리드 v2로 업그레이드해야한다고 생각했다.

클라이언트가 허브에 연결될 수 있지만 허브에 대해 테스트를 실행하면 전혀 연결할 수없는 것 같습니다 ("PHPUnit_Framework_Exception : Selenium RC에 연결할 수 없습니다. 섬기는 사람"). 내가 셀렌 독립 실행 형 서버 2.4.0에 대해 그들을 실행 해봤하고 그 작동하는 것 같습니다.

포럼에서, 셀레늄 그리드 2가 phpunit (아직?)에서 작동하지 않는다는 것을 읽었습니다.

그리드에서 테스트를 실행하려면 어떻게해야합니까? phpunit이 서버에 연결하기 위해 누락 된 것은 무엇입니까? 어떤 도움을 주셔서 감사합니다!

java -jar selenium-server-standalone-2.4.0.jar -role hub 

그리고 두 노예 : 다음과 같이

나는 허브를 설정

java -jar selenium-server-standalone-2.4.0.jar -role rc -hub http://127.0.0.1:4444/grid/register -port 5555 
java -jar selenium-server-standalone-2.4.0.jar -role webdriver -hub http://127.0.0.1:4444/grid/register -port 5556 

모든 것이 내가 그리드 콘솔에서 두 노드를 참조 여기까지 작동하는 것 같군 (HTTP :// localhost : 4444/grid/console).

<?php 

require_once 'PHPUnit/Extensions/SeleniumTestCase.php'; 

class Grid_Test extends PHPUnit_Extensions_SeleniumTestCase 
{ 
    public $captureScreenshotOnFailure = false; 

    public static $browsers = array(
     'FFLinux' => array(
      'name'  => 'Firefox on Linux', 
      'browser' => '*firefox', 
      'host'  => '127.0.0.1', 
      'port'  => 4444, 
      'timeout' => 30000 
     )); 

    public function setUp() 
    { 
     $this->setBrowserUrl('http://www.google.com'); 
    } 

    public function testGridWorking() 
    { 

     $this->open('/'); 
     $this->assertTrue(false); 
    } 
} 

이 코드는 여전히 독립 실행 형 서버 2.4.0에서 작동 :

그래서 여기에 내가 코드에서 뭐하는 거지 모두 초기화됩니다. 마지막 줄에서 예상대로 실패합니다.

예외는 PHPUnit/Extentions/SeleniumTestCase/Driver.php에서 발생하는 것으로 보입니다. 문제가있는 것 같습니다. 내가 브라우저에서 http://localhost:4444/selenium-driver/driver을 요청하면

protected function doCommand($command, array $arguments = array()) 
{ 
    $url = sprintf(
     'http://%s:%s/selenium-server/driver/?cmd=%s', 
     $this->host, 
     $this->port, 
     urlencode($command) 
    ); 

    [...] 

    $handle = @fopen($url, 'r', FALSE, $context); 
    if (!$handle) { 
     throw new PHPUnit_Framework_Exception(
      'Could not connect to the Selenium RC server.' 
     ); 
    } 
    [...] 
} 

, 내가 얻을 :

HTTP ERROR: 500 
    org.openqa.grid.internal.GridException: Session not available - [] 
    RequestURI=/selenium-server/driver 

어떤 생각이 어떻게이 문제를 해결하려면? 그 URL을 변경해야합니까? 또한

+0

초기화 코드를 게시 할 수 있습니까? 예 : 설정을 수행하는 코드 ?? – Baz1nga

답변

0

제대로 여기에 그리드가 수행하는 방법을 보여줍니다 작은 게시물입니다 당신이 설정되어 있는지 확인 : http://opensourcetester.co.uk/2011/07/06/selenium-grid-2/

가 BTW 내가 드라이버 인스턴스를 수행하는 코드를 볼 수가 타격 ... 나는 뭔가를 놓치고 있습니까? 여기

그것이 수행하는 방법이다 : 이상

require_once "phpwebdriver/WebDriver.php"; 
require("phpwebdriver/LocatorStrategy.php"); 

$webdriver = new WebDriver("localhost", "4444"); 
$webdriver->connect("firefox");        
$webdriver->get("http://google.com"); 
$element = $webdriver->findElementBy(LocatorStrategy::name, "q"); 
$element->sendKeys(array("selenium google code")); 
$element->submit(); 

$webdriver->close(); 

: http://code.google.com/p/php-webdriver-bindings/

+0

링크를 제공해 주셔서 감사합니다. 나는 그걸 전에 읽었고 그게 정확히 어떻게하는지. –

+0

대답이 업데이트되었습니다. – Baz1nga

+0

PHPUnit_Extensions_SeleniumTestCase는 아직 Selenium 2.0을 지원하지 않습니다. 연결된 바인딩은 나를 위해 일하지 않습니다. 하지만 일할 게있어서 감사합니다! –

0

셀레늄 그리드 2 phpunit을 사용하려고 시도에 대한 문제는 이미 프로젝트 소유자로보고되고있다. 가능한 패치를 보시려면 here 패치를보십시오.

어쨌든, 내가 당신이라면 php-webdriver과 같은 PHP 용 드라이버 중 하나를 통해 WebDriver로 마이그레이션하려고 생각할 것입니다.

관련 문제