Статьи

PHPUnit_Selenium


В версии 1.2 PHPUnit_Selenium впервые поддерживает (в основном) API-интерфейс Selenium 2 WebDriver.
Хотя PHPUnit_Selenium уже работал с Selenium 2, он делал это только с помощью эмуляции Selenium 1, включенной в jar; теперь он предоставляет объектно-ориентированный API-интерфейс, изначально поддерживаемый в базовом тестовом примере PHPUnit, поставляемом в канале PEAR PHPUnit.

Установка

Установка обычно проще через PEAR, который установит библиотеку для всех пользователей машины:

sudo pear channel-discover pear.phpunit.de      # not necessary if you already have PHPUnit
sudo pear install phpunit/PHPUnit_Selenium

Чтобы обновить библиотеку, выполните:

sudo pear upgrade phpunit/PHPUnit_Selenium

Возможно, вам придется обновить саму грушу перед установкой:

sudo pear upgrade pear

если ваш дистрибутив / OS X не поставляет версию PEAR более новую, чтобы удовлетворить зависимости PHPUnit.

Настроить

Старый API все еще поддерживается и будет в обозримом будущем, пока Selenium 2 продолжает эмулировать его; он доступен путем создания подкласса класса PHPUnit_Extensions_SeleniumTestCase, и его использование подробно описано в руководстве .

Вместо этого API-интерфейс WebDriver предоставляется PHPUnit_Extensions_Selenium2TestCase:

class Extensions_Selenium2TestCaseTest extends PHPUnit_Extensions_Selenium2TestCase
{
    public function setUp()
    {
        $this->setHost('localhost');
        $this->setPort(4444);           // standard values if you're using a JAR locally
        $this->setBrowser('firefox');   // no * prefixes
        $this->setBrowserUrl('http://google.com');     // the URL where to start
    }
}

API setters идентичен старому, за исключением того, что имя браузера не нуждается в префиксе ‘*’, как в ‘* chrome’.

Передвигаться

В объектах API, Session и Element есть две основные концепции . Все методы, вызываемые в объекте тестового примера, автоматически делегируются текущему сеансу (экземпляр PHPUnit_Extensions_Selenium2TestCase_Session); Вы можете получить элементы, выбрав их на текущей странице через сеанс.

$ this-> url (‘folder / index.php’) и $ this-> url () задают новое местоположение для браузера и извлекают текущее, соответственно. $ this-> title () показывает вам <title> текущей страницы.

Выбор элемента

Вы можете выбирать элементы любым мыслимым способом, от имен классов до селекторов CSS и атрибутов, таких как id и name, или даже запросов XPath. Все эти методы возвращают объект PHPUnit_Extensions_Selenium2TestCase_Element.

   public function testShortenedApiForSelectionOfElement()
    {
        $this->url('html/test_element_selection.html');

        $element = $this->byClassName('theDivClass');
        $this->assertEquals('The right div', $element->text());

        $element = $this->byCssSelector('div.theDivClass');
        $this->assertEquals('The right div', $element->text());

        $element = $this->byId('theDivId');
        $this->assertEquals('The right div', $element->text());

        $element = $this->byName('theDivName');
        $this->assertEquals('The right div', $element->text());

        $element = $this->byXPath('//div[@id]');
        $this->assertEquals('The right div', $element->text());
    }

взаимодействующий

Вы можете вызвать click () для объектов Element; сокращение для этой операции — $ this-> clickOnElement ($ id).

Элементы также поддерживают text () для просмотра содержимого обычных элементов и value () для установки или получения значения элементов формы.

    public function testTypingViaTheKeyboard()
    {
        $this->url('html/test_type_page1.html');
        $usernameInput = $this->byName('username');
        $usernameInput->value('TestUser');
        $this->assertEquals('TestUser', $usernameInput->value());

        $passwordInput = $this->byName('password');
        $passwordInput->value('testUserPassword');
        $this->assertEquals('testUserPassword', $passwordInput->value());

        $this->clickOnElement('submitButton');
        $h2 = $this->byCssSelector('h2');
        $this->assertRegExp('/Welcome, TestUser!/', $h2->text());
    }

Выводы

Лучшая документация по API составлена ​​из примеров кода , так как они являются частью CI, и вы уверены, что они всегда будут в курсе.

PHPUnit_Selenium означает запуск браузера прямо внутри вашего набора тестов PHPUnit, а Selenium поддерживает как локальные экземпляры, так и работу в облаке. Сквозные тесты, написанные с помощью этого инструмента, могут выполнять JavaScript на внутренних страницах и моделировать реальный пользовательский опыт, отслеживая регрессии из-за отсутствия интеграции между клиентской и серверной сторонами. Поскольку это весь код PHP, вы можете запускать проверки через бэкдор (например, напрямую обращаться к базе данных) или повторно использовать свой тестовый код для загрузки приборов.

Поддержка внутри PHPUnit_Selenium еще не завершена, но я получаю некоторые отзывы от пользователей перед ее завершением. Уверяю вас, что многие основные случаи охватываются командами, показанными ранее, и что поддержка новых заключается в добавлении класса длиной в дюжину строк кода.