Использования паттерна Фасад (Facade) в автоматизации с использованием Selenium Webdriver

Использования паттерна Фасад (Facade) в автоматизации с использованием Selenium Webdriver

Всем привет. Мы уже рассмотрели несколько паттернов проектирования, теперь пришел черед к фасаду.

Этот шаблон объединяет группу объектов в рамках одного специализированного интерфейса и переадресует вызовы его методов к этим объектам.

Его использование необходимо, если нужно:

  • упростить доступ к сложной системе;
  • уменьшить число зависимостей между системой и клиентом;
  • создать различные уровни доступа к системе.

Прежде всего нужно уточнить, что интерфейс, предоставляющий шаблон, не является суммой всех методов объектов, входящих в систему. Создание такой обобщенной версии приводит к появлению “божественного интерфейса”, – интерфейса с огромным числом методов, без четко выраженной цели и порождающего большое количество зависимостей. Таким образом, назначение Фасада – создать интерфейс, содержащий методы для решения определённой задачи или предоставляющий некоторую абстракцию исходной системы.

Как и раньше, опишем основные элементы и классы проекта:

  • Facade (класс проекта PurchaseFacade) – содержит объекты страниц и вызовы методов-действий над ними.
  • Page Objects (например, ItemPage, ShippingAddressPage, ShoppingCartPageSignInPage) – содержат реализацию методов, например, Search и Navigate. Также предоставляют доступ к методам-валидаторам, содержащимся в других классах, например, ItemPageValidator. Как и раньше, мы используем классы элементов, –  SignInPageMap и т. д.
  • UI тесты (Facade_Tests) – содержит тест(ы). Может иметь только один объект Фасада.

Что будет выполнять наш тест?

1. Переходить на страницу товара спортивного магазина: http://www.prodirectsoccer.com/products/Nike-Team-Training-Ball-Football-Balls-Yellow-Yellow-Purple-61857.aspx?

2. Проверять цену.

3. Выбирать размер мяча:

facade

4. Нажимать на кнопку “BUY NOW”.

5. Переходить в корзину путем нажатия на нее в шапке сайта.

6. Нажимать на кнопку “CHECKOUT:

facade-1

7. После этого выполнять вход.

8. Заполнять необходимые поля для доставки.

9. Нажимать на кнопку “PROCEED TO PAYMENT”:

facade-2

Структура проекта

Солюшен проекта представлен ниже:

facade-3

Core и Pages мы рассмотрели в предыдущей статье. Стоит только обратить внимание на ShippingAddressPage, где содержится метод для заполнения полей доставки товара:

Класс ClientInfo объявляет лишь поля, с которых мы будем использовать лишь первые два:

Рассмотрим непосредственно класс фасада:

Он содержит свойства, которые возвращают соответствующие объекты страниц. И если возникнуть какие-то изменения, то нам придется сделать изменения лишь в классах элементов, валидаторах или же в методе ProceedToPayment, если изменение в логике.

Ниже представлен код самого теста:

Проект можно просмотреть по ссылке.

На этом все, подписывайтесь на рассылку!

RelatedPost