В версии 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 еще не завершена, но я получаю некоторые отзывы от пользователей перед ее завершением. Уверяю вас, что многие основные случаи охватываются командами, показанными ранее, и что поддержка новых заключается в добавлении класса длиной в дюжину строк кода.