Пост №8. Создание своего test framework-а с нуля. Часть 4
Всем привет! В предыдущих постах я начал рассказывать про создание своего test framework-а с нуля. В них рассказывалось про выбор технологий, создание проекта в IDE, структуру и написание feature на языке Gherkin, создание Step-ов для реализации тестовой логики, описание page-ов, используя методологию Page Object Pattern. В сегодняшнем посте будут рассмотрены Util-классы, облегчающие написание page object и делающих тесты более гибкими и расширяемыми.
Итак, начнем. В примере, который мы рассматриваем, Util-классы можно условно разделить на два вида: Controllers - классы, отвечающие за определение типа элемента и действий с ними; и Utils - классы, связаные непосредственно с методологией Page Object Pattern.
Первоначально разберемся с классами Controllers. Данные классы служат для определения типа элемента на странице. Как было написано в предыдущем посте, это служит для облегчения работы с элементами страницы, т.к. в Controllers-классах прописаны используемые действия над ними (определенные правила работы с элементами), что избавляет нас от лишней копипасты и делает тесты более читаемые и понимаемые.
Как и в случае с Pages, в Controllers прописывается класс BaseElement.
В нем прописываются основные действия, которые могут применяться ко всем типам элементов, начиная от получения самого элемента, заканчивая кликом на него и определением доступности данного элемента.
Далее рассмотрим пример одного из типов элементов, например Textbox.
Как мы видим, в данном классе у нас прописаны основные действия над данным типом элементов. Так же стоит заметить, что нет четкой привязанности определенному элементу, что позволяет использовать методы для множества элементов типа textbox.
По подобному принципу написаны и остальные классы в package Controllers, т.е. все действия с элементами вынесены за рамки реализации тестовой логики, что облегчает понимание и последующую поддержку тестов.
Далее перейдем к package Utils. В нем расположены вспомогательные и конфигурационные классы. Начнем их рассматривать.
Для начала следует обратить внимание, на класс WebDiverConfig. В нем находится конфигурация WebDiver, т.е. какой браузер запусать и с какими настройками отрывать сессию.
Как видно на изображении выше, класс написан так, что есть возможность его расширить для использования других браузеров.
Следующим основным классном является PageObjectFactory, служащий для получения обыекта со страницы браузера.
Вспомогательными классом для PageObjectFactory являются классы WrapperFactory, CustomFieldDecorator и LocatingCustomElementListHandler. Данные классы служат для инициализации, индексации и локализации элементов на странице во время работы сессии браузера. Ниже приведу их примеры.
Ну и напоследок стоит уделить немного внимамия на последний из утилитных классов - это Configuration. Он служит для подключения property-файла к проекту. Так как в данный файл могут быть вынесены такие параметры, как URL тестируемого приложения и данные для входа пользователей, то данный класс нам крайне необходим.
Заключение.
Итак, в данном посте были рассмотрены вспомогательные классы test framework-а. После написания подобного набора классов, у вас не должно вознинуть больших проблем с написанием тестов, их поддержкой и масштабируемостью покрытия тестами системы.
На данном посте я заканчиваю серию о написании test framework-а. Если что-то осталось непонятным, то постараюсь ответить на все вопросы. Так же можно посмотеть исходники проекта на гитхабе.
З.Ы. Всем огромное спасибо за внимание и интерес к постам. На сим, заканчиваю свое повествование. Если есть желание и интерес еще что-то узнать, почитать, то пишите темы, постараюсь их осветить (если же конечно у меня был опыт с тем что предложите и мне будет что написать).








