Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Переход на Selenium 2 PhantomJS

Anna | 31.05.2014 | нет комментариев

В этом посте я запишу, как я переходил с Selenium RC на Selenium 2. Переход был мотивирован применением PhantomJS в качестве браузера. В PhantomJS встроен Ghost Driver, тот, что является WebDriver в том смысле, тот, что использует Selenium 2. Но мои предыдущие тесты PHPUnit применяли класс PHPUnit_Extensions_SeleniumTestCase, тот, что не может трудиться с WebDriver. Необходимо было его заменить на PHPUnit_Extensions_Selenium2TestCase совместно со каждому синтаксисом тестов.

Имеющееся окружение

Тесты, записанные с поддержкой Selenium IDE, которые, вследствие Jenkins, при всяком hg push конвертируются в PHPUnit TestCase с поддержкой selenium2php. Позже этого запускается сам PHPUnit на полученных php-файлах тестов. При конвертации механически проставляется IP-адрес виртуальной машины, где находится сервер Selenium RC, тот, что исполняет тесты в браузере Firefox.

Цель

Получить тоже самое, только взамен Firefox консольный PhantomJS и полагаемое увеличение продуктивности как следствие.

Особенности Selenium 2

Selenium 2 имеет свои особенности, которые следует рассматривать.
1. Все переходы по ссылкам сейчас не нуждаются в ожидании, то есть нет необходимости в clickAndWait, довольно легко click, если дело касается обыкновенной ссылки (не js функции перехода). Повод этого в том, что сейчас все вызовы блокирующие, то есть не асинхронные, как подмечают на stackoverflow, это отлично.
2. При работе с javascript никаких блокировок не происходит, и необходимо вручную вставлять команды ожидания. Скажем, waitForElementPresent на локатор, тот, что возникает позже выполнения AJAX-запроса.
3. Вы не можете манипулировать заметными элементами.
Но особенности возникли и у PHPUnit Selenium2TestCase. Основное, это примерно всецело новейший синтаксис. Все команды принимают только один довод, а некоторые ветхие сейчас именуются по-иному. Скажем, взамен open(), сейчас url().
Возникла надобность обнаружить методы обхода этих нововведений.

Метод 1: Адаптер.

Я решил испробовать написать адаптер MigrationToSelenium2 для перехода от PHPUnit_Extensions_SeleniumTestCase к PHPUnit_Extensions_Selenium2TestCase. То есть планировал продолжить применять selenium2php для конвертации тестов в формате Selenium RC, но наследуя свой Migration класс, тот, что осуществит применение способов по формату PHPUnit Selenium2.
Когда дошло дело до AJAX-запросов и манипуляцией видимости элементов на странице, я осознал, что тесты оставить непоколебимыми не получится. А раз тесты всё равно менять, то заодно решил поменять и конвертер. В данный момент нет планов поддерживать Migration Class.

Метод 2: selenium2php — механический конвертер Selenium IDE тестов в Selenium 2

Я расширил план selenium2php для поддержки формата Selenium2. В изложении плана на Github’е есть примеры применения. Лаконично, сейчас из html тестов формата Selense с поддержкой консольной утилиты получаем файл теста с синтаксисом для класса PHPUnit_Extensions_Selenium2TestCase.

Запуск тестов на PhantomJS

Скачиваем (если еще нет) Selenium Server (он же RC) и PhantomJS. Запускаем Selenium grid hub и подключаем к нему PhantomJS как заказчика:
java -jar selenium.jar -role hub
phantomjs –webdriver=1408 –webdriver-selenium-grid-hub=http://127.0.0.1:4444

Окружение для выполнение тестов готово. Сейчас необходимо удостовериться, что в тесте целевым браузером указана строка «phantomjs», а адрес и порт совпадают с grid hub.
Остаётся запустить PHPUnit:
php phpunit.phar YourTest.php
Итог
Исправление готовых тестов, хоть и в Selenium IDE, для поддержки Selenium 2 заняло много времени, но это всё равно стремительней и комфортнее, чем создавать и позднее исправлять тесты на языке php. Конвертер selenium2php облегчает эту работу.

К сожалению, в итоге обнаружились серьёзные недочеты.
1. Проверялось всё на PHPUnit 3.7.27, Selenium Server 2.37, PhantomJS 1.9.2, но в результате на виртуальной машине WinXP связка была нестабильная и в 70% случаях при запуске нового теста выдавалось FORWARDING_TO_NODE_FAILED. На Win7 это случалось значительно реже, приблизительно 1 тест из 50. Но сам факт наличия таких выпадов дюже мешает при применении CI.
2. Еще одно разочарование — скорость выполнения скрипта. Хоть PhantomJS и консольный, но на выполнение всех тестов у него уходит 14 минут, взамен 19 минутс Selenium 1 Firefox.
Совместно эти два недостатка принудили меня временно отложить Selenium 2 до наилучших времён.

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB