Deep dive into using patterns with Selenium: огляд 8 шаблонів, що стануть у пригоді

Categories: SoftwareAutomotiveCommunicationsConsumer and RetailFinancial ServicesHealthcareManufacturing and IndustrialMediaTechnology

Автор: Олексій Волошин, Senior QA Automation Engineer, Consultant, GlobalLogic Ukraine

Окрім мов програмування, якими може бути написаний код для автоматизації тестування web-застосунків, радимо вивчити шаблони програмування, для використання їх разом з фреймворком Selenium. Їх, насправді, існує дуже багато, і не всі, відверто кажучи, корисні.

У цій колонці ми розберемо декілька найефективніших патернів програмування та покажемо їхнє застосування на проєкті.  Поїхали!

Для початку, відповімо на питання:

Для чого потрібні шаблони?

Шаблони програмування, це свого роду, методики, які можуть допомогти розробнику розв’язати певні проблеми у певних ситуаціях. Іншими словами, вони можуть значно полегшити щоденну рутину то зробити проєктування більш оптимальним процесом.

Усі шаблони поділяють на три типи: 

  • Породжуючі (Creational)
  • Структурні (Structural)
  • Поведінкові (Behavioural)

Ми розглянемо шаблони з усіх цих типів на прикладі реального проєкту. Забігаючи наперед скажу, що проєкт досить простий, адже був написаний для того, щоб наочно продемонструвати, як можна вдосконалити код, використовуючи різні типи шаблонів. У нашому випадку це буде 8 патернів.

#1 Page Object

Автоматизовані тести з використанням шаблонів я проводитиму на сайті automationpractice.com. Перший шаблон, який я застосував, для тестування, це – Page Object. Цей патерн є одним з найбільш часто використовуваних архітектурних рішень в автоматизації. Проте, і один з тих, що найбільше піддається критиці розробників. Оскільки, шаблон містить досить багато коду на початку, його або досить важко розвернути молодому тестувальнику, або досить затратно з точки зору часу.

Але є і суттєві переваги даного рішення: для кожної сторінки веб додатку, що тестується, Page Object створює клас, в якому описуються веб елементи, які є на цій сторінці, та методи по взаємодії з ними. Тобто, з його допомогою ви можете створити окремі об’єкти та суттєво зменшити кількість коду, тому що одні й ті ж об’єкти сторінок можна використовувати у різних тестах. 

Ось як виглядає Page Object у коді

#2 Page factory

Другий шаблон, який ми розглянемо, це – Page Factory, який часто використовується у зв’язці з Page Object. Page Factory, це патерн який використовується для того, щоб ініціалізувати ваші сторінки та елементи на них. Як саме? Подивимось на прикладі.

#3 Builder

Цей патерн дозволяє розбити алгоритм створення складного об’єкта на окремі процеси. На додаток, він дозволяє уникнути так званого “хардкоду” та можливих помилок при копіюванні даних. Ось як це виглядає на практиці

#4 Singleton

Цей шаблон допомагає створювати єдиний об’єкт instance класу і надає до цього об’єкту точку доступу. Насправді, використання цього шаблону в автоматизації дещо обмежене, проте знати його однозначно буде корисно. Глянемо, як він реалізується на нашому проєкті.

#5 Facade

Цей патерн дозволяє  “заховати” складну систему класів за “гарним фасадом’’, тобто простим інтерфейсом. Ось як виглядає цей шаблон у коді.

#6 Strategy

Шаблон використовується коли потрібно визначити типи алгоритмів, які часто змінюються та винести їх у власні класи – стратегії. Щоб описати цей шаблон більш детально, я пропоную розглянути діаграму нижче:

Припустимо, що у нас є певний інтерфейс, який містить абстрактний опис методу doOperation. Цей метод імплементується декількома класами (у нашому прикладі – це математичні операції). Відповідно, метод doOperation має три види реалізації. І в цьому і є суть цієї стратегії. А тепер подивимось як реалізується даний шаблон на нашому проєкті.

#7 Decorator

Використання цього шаблону допомагає нам додавати новий функціонал до об’єкта, “огортаючи” його новими листами, не змінюючи при цьому його суть. Такий підхід часто називають Cabbage principle, або принципом матрьошки. Реалізується він на проєкті наступним чином.

#8 Factory

Фабричний метод це шаблон проєктування, який визначає загальний інтерфейс для створення об’єктів у суперкласах, дозволяючи при цьому підкласам змінювати тип об’єктів, які створюються. Якщо провести аналогію, то можна уявити собі фабрику, з якої логістика здійснюється кількома способами, і, власне, отримати те, що нам потрібно, ми можемо зробивши конкретний запит. А тепер пропоную подивитись, як цей метод виглядає у коді.

Власне, це був останній шаблон, який би ми хотіли сьогодні розібрати. Впевнені, що використання шаблонів з цього списку значно полегшить вам написання коду!

P.S. А ось посилання на проєкт, що ми створювали, на GitHub

Top Insights

Python: чому вивчати та з чого почати?

Python: чому вивчати та з чого почати?

InsightsSoftwareAutomotiveCommunicationsConsumer and RetailFinancial ServicesHealthcareManufacturing and IndustrialMediaTechnology
Тонкощі CV або Як скласти та куди надіслати, щоб отримати пропозицію мрії про співпрацю

Тонкощі CV або Як скласти та куди надіслати,...

HRAutomotiveCommunicationsConsumer and RetailFinancial ServicesHealthcareManufacturing and IndustrialMediaTechnology
CI/CD для JS розробників. Частина перша – теорія

CI/CD для JS розробників. Частина перша – теорія

DevelopmentSoftwareAutomotiveCommunicationsConsumer and RetailFinancial ServicesHealthcareManufacturing and IndustrialMediaTechnology
Soft and Hard Skills: Що важливіше? Розповідь одного рекрутера

Soft and Hard Skills: Що важливіше? Розповідь одного...

HRAutomotiveCommunicationsConsumer and RetailFinancial ServicesHealthcareManufacturing and IndustrialMediaTechnology

ТОП автори

Volodymyr Nos

Volodymyr Nos

Lead Software Engineer, Engineering, GlobalLogic

Mariia Krapyvka

Mariia Krapyvka

Specialist, GlobalLogic

Dmytro Haidenko

Dmytro Haidenko

Senior Test Engineer, Quality Assurance, GlobalLogic

Dmytro Ryabokon

Dmytro Ryabokon

Director, Engineering, GlobalLogic

Roman Ostash

Roman Ostash

Lead Software Engineer, Engineering, GlobalLogic

Категорії блогів

  • URL copied!