perl-selenium: как расширить объект Test :: WWW :: Selenium с помощью пользовательских методов? - PullRequest
0 голосов
/ 29 марта 2011

Используя perl и TAP, я написал много тестов на селен и сохранил их в * .t файлах.

Я создал несколько вспомогательных функций, поместил их в не объектно-ориентированный пакет, скажем, My:: Util :: SeleniumHelper.

Все функции экспортируются из этого модуля.Вначале одного пакета было достаточно, теперь в одномодульном API содержится немало не связанных функций.Эти функции вызываются, например, make_sel (), head_ok (), cms_logout (), cms_login (), cms_clickthru_simple (), selenium_rc_running (), treecontrol_toggles () - вы получите идею.

Более того, многие блоки)кода в t-файлах все еще избыточно, что делает файл .t похожим на шаблон.

Таким образом, я хочу придать моему * .t коду более внушительный дизайн.

Любые идеи о том, как разработать новый API?

По сути, я также ищу примеры кода (здесь или в Интернете), где кто-то расширил объект селена вумный путь.Он не обязательно должен быть в perl.

Было бы полезно добавить методы в объект Test :: WWW :: Selenium $ sel?

$sel->my_click_ok()

Должен ли япопытаться переопределить объект $ sel ?, Получение Test :: WWW :: Selenium :: Customized класса из Test :: WWW :: Selenium

Это нарушило бы «Предпочитать композицию над наследованием»

Должен ли я обернуть объект селена в другой объект с помощью композиции?

$myobj->{sel}->click_ok()

Вот еще несколько требований или мыслей:

Я также хочу использовать шаблон объектов страницы / идиома .Пока не делаю.Может быть, так

$myobj->{current_page}->loginbox

или

$myobj->do_stuff($current_page->loginbox)

Я заметил, что в большинстве случаев, в основном, я хотел бы дать методу селена что-то вроде модификатора Moose'sround ().Делайте стандартные вещи, но делайте некоторые вещи до и после.

Однако я предпочитаю не использовать Moose здесь, потому что тесты должны выполняться на нескольких разных машинах, и не хотят устанавливать Moose и всеего зависимости от всех этих компьютеров.Я не говорю, что невозможно использовать лося, однако я еще не использовал не-лося объекты (Test :: WWW :: Selenium) и лося вместе.

Ответы [ 3 ]

1 голос
/ 10 июня 2011

Создание собственного класса, унаследованного от Selenium, кажется в этом случае вполне разумным.Решение для делегирования Эрика Муса немного чище;но немного сложнее тоже.

1 голос
/ 18 мая 2012

У меня тест на подклассы :: WWW :: Selenium.new {} должен вызывать SUPER, но затем он выглядит и имеет вкус родителя.У меня есть новый open (), который связывает HTML и проверяет ссылки (запоминается, конечно).

1 голос
/ 10 июня 2011

Я использую Moose и делегирование для расширения Test :: WWW :: Selenium.Единственное, что есть в расширении - это конфигурация (хост, порт, браузер и т. Д.).Все остальное в ролях.

...