Использование Selenium Grid 2 с тестами PHPUnit

Недавно я написал много тестов на селен 1 для довольно сложного проекта. Все они написаны на php и без проблем работают на selenium-сервере 1.0.7.

Очевидно, что с firefox 5 (и 6, выпущенными сегодня) selenium server 1.0.7 больше не работает. Я пробовал, но сервер просто открывает пустые окна.

Теперь я пытаюсь запустить эти тесты на селеновой сетке. Мне удалось получить концентратор и пару пультов дистанционного управления runnnig с использованием grid v1, но они открывают только пустые окна, как и старый сервер. Итак, я решил, что мне нужно перейти на grid v2.

По какой-то причине я могу подключить клиентов к хабу, но если я попробую запустить свои тесты на хабе, он вообще не сможет подключиться («PHPUnit_Framework_Exception: не удалось подключиться к серверу Selenium RC»). Я попытался запустить их на автономном сервере Selenium 2.4.0, и, похоже, это сработало.

Я читал на форуме, что selenium grid 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. Кажется, в этом проблема.

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://localhost:4444/selenium-driver/driver в браузере, я получить:

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

Есть идеи, как это исправить? Может быть, мне нужно изменить этот URL?


person Martin Fobian    schedule 16.08.2011    source источник
comment
Можете ли вы опубликовать свой код инициализации, то есть код, который выполняет настройку?   -  person Baz1nga    schedule 16.08.2011


Ответы (2)


Также убедитесь, что вы правильно настроили сетку. Вот небольшой пост, который показывает, как это делается: http://opensourcetester.co.uk/2011/07/06/selenium-grid-2/

Кстати, я не вижу кода, который создает экземпляр драйвера .. Я что-то упускаю?

Вот как это делается:

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/

person Baz1nga    schedule 16.08.2011
comment
Спасибо за ссылку. Я читал это раньше, и именно так я это делаю. - person Martin Fobian; 16.08.2011
comment
По-видимому, PHPUnit_Extensions_SeleniumTestCase еще не поддерживает Selenium 2.0. У меня тоже не работают привязки, с которыми вы связались. Но мне есть над чем поработать, так что спасибо! - person Martin Fobian; 18.08.2011

О проблеме с попыткой использования PHPUnit с Selenium Grid 2 уже сообщили владельцам проекта. Взгляните на доступный патч здесь, чтобы узнать, это работает для вас.

В любом случае, на вашем месте я бы начал думать о переходе на WebDriver через один из доступных драйверов для PHP, например php-webdriver.

person David Santiago Turiño    schedule 17.12.2011