Паттерн Facade и Selenium Webdriver

Паттерн Facade и Selenium Webdriver

В этой статье мы рассмотрим паттер проектирования Facade применимо к Selenium Webdriver.

Этот паттерн предоставляет простой и легкий в  использовании интерфейс для более сложного и комплексного кода, например, API.

Описание паттерна Facade 

Если вам приходится иметь дело со сложным или плохо разработанным интерфейсом, вы иногда можете запутаться в доступном функционале. К тому же, довольно часто, при функциональном тестировании, вам не нужны все предусмотренные контролы. В этом случае для упрощения поддержки фреймворка все объявления объектов на странице и действия над ними выносятся за пределы фасада. Также у вас есть контроль над тем, как будет работать ваш фреймворк, так как использование дополнительных методов, объявленных в фасаде, может помочь избежать недопонимания или неправильного использования WebDriver. Если необходимо увеличить тестовое покрытие, – то для этого потребуется обновить фасад или добавлить новый.

Рассматриваемый пример

Пример кода расположен по ссылке. Для его написания использовался C# и вы можете его просто открыть в Visual Studio.
Рассмотрим используемый код. В этом примере установка WebDriver выполняется с помощью класса Constants с использованием enum Browsers.

facade-1

В нашем фасаде используется только четыре метода Start, Stop, FindElement и ExecuteJavaScript. Также можно объявить другие методы для работы с WebDriver functionality, но небольшой пример не требует этого.

Использованием фасада похоже на использование самого вебдрайвера:

Запустив этот пример, можно увидеть, что открывается консольное окно и запускается Chrome, в котором выполняется процесс поиска на тестовом сайте.

facade

Повторюсь: если интерфейс довольно сложный, то использовать фасад не обязательно. Тем не менее, имея контроль над WebDriver при его использовании, - является хорошим подходом. В данном примере вы можете увидеть, что я использовал явное ожидание при поиске элементов на странице.