Использование Selenium Grid 2 с тестами PHPUnit - PullRequest
1 голос
/ 16 августа 2011

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

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

Теперь я пытаюсь запустить эти тесты на сетке селена.Мне удалось получить концентратор и несколько запущенных пультов дистанционного управления с использованием grid v1, но они открывали только пустые окна, как это делал старый сервер.Поэтому я решил, что мне нужно перейти на grid 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. Кажется, есть проблема.

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, может быть?

Ответы [ 2 ]

0 голосов
/ 17 декабря 2011

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

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

0 голосов
/ 16 августа 2011

Также убедитесь, что вы правильно настроили Grid, вот небольшой пост, который показывает, как это делается: 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/

...