Фреймворк Selenium добре відомий тестувальникам. Зручний, багатофункціональний інструмент. Але, як-то кажуть, немає межі досконалості. Це чудово доводить фреймворк Selenide.
У цій статті ви дізнаєтесь, чим вони відрізняються та які задачі спростять. На прикладі я поясню, як виконати тест за допомогою Selenide. Поїхали!
Selenide – це апгрейд Selenium
Розмова про Selenide не можлива без короткого огляду Selenium. Цей інструмент найчастіше використовується для тестування вебзастосунків та дозволяє автоматизувати дії у браузері. Простіше кажучи, Selenium немов перекладач, який допомагає тестувальнику та розробнику «спілкуватися» з браузером.
Selenide – покращена версія Selenium, оболонка, яка не вимагає додаткових бібліотек або інших фіч для написання тестів. З ним ви зосередитесь на логіці застосунку.
У Selenide є все необхідне для роботи. Достатньо прочитати документацію, щоб розібратися в системі та почати створювати тести для UI та API. Фреймворк підтримує найпоширеніші браузери: Chrome, Safari, Edge, Opera.
Selenium Webdriver – як ним користуватися
Ключовою технологією фреймворку Selenium є Webdriver. Завдяки йому тестувальник може імітувати дії користувачів у браузері.
Для роботи з Webdriver потрібні 3 компоненти:
- Браузер, який потрібно автоматизувати.
- Драйвер браузера для керування ним.
- Скрипт або тест із набором команд для драйвера.
Те ж саме необхідне і для Selenide. Але є нюанс: цей фреймворк повністю бере на себе функцію підключення браузера. Вам не доведеться скачувати драйвери та працювати з їхніми версіями. Усе цілком на боці Selenide. Завантаження драйвера, запуск і видалення після тесту займають буквально мілісекунди. А ви зможете почати працювати з тестами та кодом.
Стартувати з Selenide легко, але спочатку потрібно подивитися, як виглядає простий тест на Selenium. Почнімо з імпортів для підключення фреймворку.
Далі потрібно створити Before-методи з анотаціями...
Після цього – After-методи...
І нарешті – безпосередньо тест.
Відбувається ініціалізація драйвера, потім виконується тест, і драйвер вимикається.
Виглядає просто, але у масштабах великого комерційного проєкту потребує дуже багато уваги до речей, якими так не хочеться займатися кожного разу для кожного тесту.
Переваги Selenide
Декілька особливостей цього фреймворку роблять тестування дійсно продуктивним:
- Автоматичне розв’язання проблем з Ajax
Selenide має метод shouldBe, до якого можна додавати потрібний Condition: visible, clickable та будь-який інший – аж до рукописного. Цей інструмент допомагає там, де безсилі сліпи із Selenium.
Уявімо елемент на сайті, який завантажується хвилину. У Selenium для такої ситуації потрібно прописати сліп на хвилину, і фреймворк чекатиме вказаний час. У Selenide з методом shouldBe все інакше. Протягом хвилини він з певною періодичністю надсилає до сторінки GET-запити (частоту запитів можна налаштувати). Якщо елемент з’являється до закінчення зазначеної хвилини, система переходить до прописаних дій. Так очікування скорочується і вирішується проблема тайм-аутів. Помилка можлива в тому випадку, якщо за хвилину не буде відповіді.
- Управління життєдіяльністю браузера
Фреймворк виконує повторювану роботу з браузером і його драйверами.
- Автоматичне створення звітів
Selenium створює звіти у вигляді скриншотів та HTML-файлів, які розміщуються в папці build. У Selenide все це виконується автоматично. Якщо з певної причини потрібно вимкнути цю функцію, достатньо однієї простої команди. При цьому можна створювати кастомні репорти. Наприклад, підключити Allure, з яким звіти будуть охайними та зручними для аналізу.
А ще у Selenide є приємні «плюшки». Фреймворк надає методи для дій, які у Selenium неможливо зробити однією командою. Це може бути вибір радіокнопки чи елемента зі списку, знімок екрана, очищення кешу браузера.
Як підключити Selenide
Для прикладу розглянемо написання простого тесту. Для цього я використовував архітектуру Maven і TestNG. Спочатку треба закинути у pom-файл необхідні для цього фреймворку dependency. У моєму випадку це TestNG і сам Selenide.
Далі виконуються імпорти.
А потім залишається написати код тесту.
У Selenide логіка написання максимально проста. Якщо ви добре знаєте англійську, то швидко розберетесь у всьому. Іноді навіть кажуть: Selenide робить Java подібною до Python. Аж настільки все просто.
Однак зверніть увагу на один нюанс у коді – використання $. Цей символ замінює функцію findElement. Таким чином не потрібно повністю прописувати драйвер, findElement та By, шукати XPath, ID, Name тощо. Знак перетворює цілий рядок коду лише на один символ!
Припустимо, ви вводите ім’я за класом, але не вказали, що шукаєте за класом. Тоді Selenide починає перебирати все, доки не знайде, де це використовується. Хоча краще відразу вказувати, що ви шукаєте. Так буде ще швидше.
Символ $ можна доповнювати й іншими символами. Наприклад, вказати х для пошуку XPath. Якщо вам потрібно знайти не XPath, вкажіть $ і Condition, де в дужках буде, наприклад, клас і byName, byId тощо.
Вказуючи відразу два знаки $, ви зможете шукати кілька елементів. Наприклад, у вас є декілька Input. Тоді фреймворк шукатиме всі можливі елементи Input. Причому колекціонуватиме їх, створюватиме мапи й повертатиме колекції.
У Selenide доступний метод sendKeys, але часто його рекомендують замінити на метод setValue. Пов’язано це з тим, що в деяких випадках sendKeys може не достукатися до поля введення. Можна оминути це обмеження. Скажімо, переписати Value самого поля. Але це, чесно кажучи, незграбний підхід. Використання setValue дозволяє обійтись однією командою замість написання цілого скрипта.
Selenide має ті ж екшени, які в Selenium підключаються окремою бібліотекою. Це Double Click, Context Click та інші. Також фреймворк має Key, завдяки чому можна «повісити» на елемент натискання кнопки Enter, Shift, Tab тощо. Тобто для підключення такого функціоналу не потрібна додаткова бібліотека.
Крім того, не треба робити, як в екшенах, build.perform і сам екшен, щоб він запустився. У Selenide це відбувається автоматично. У прикладі я використав pressEnter, і система автоматично натискає Enter. Єдине обмеження: не можна натиснути кнопку без прив’язки до будь-чого.
Потрібен елемент, на який виконуватиметься процес натискання Enter. Якщо задача – не прив’язуватися до елемента, можете визначити body як натискання на Enter. Тоді система натисне Enter на порожнє місце, і відбудеться необхідна дія.
При роботі з Selenide можна використовувати будь-який фреймворк: JUnit, TestNG, ScalaTest, Cucumber чи JBehave. Запуск відбувається як звичайний юніт-тест з IDE, ANT-скрипту або через mvn test. Тож зможете працювати так, як зручно саме вам.
Запускаємо тест на Selenide
Тут хочу звернути увагу на WebDriverManager. Саме він частково знімає рутину у роботі з драйверами.
Selenium
Щоправда, цей інструмент – не панацея. Наприклад, у прикладі я зазначив не chromedriver, а chromiumdriver. Це покращена версія, яка працює трохи швидше. Але виявилось, у мене стояла 107-ма версія, а драйвер завантажувався для 104-ї. Це призводило до конфлікту, і тест не запускався. WebDriverManager, який має вирішувати такі задачі «під капотом», нічого не робив.
У результаті довелося самому закинути потрібну версію браузера та написати метод, що вказував шлях до драйвера. Ймовірно, через деякий час вийде нова версія, доведеться це все видаляти й вказувати новий варіант… Тож зважайте на такі моменти.
Пропоную порівняти написання однакових тестів на Selenide та Selenium (на ілюстрації – ліворуч та праворуч відповідно).
У прикладах прописано 4 дії:
- зайти в Google;
- ввести у пошуку слово Selenide;
- перейти за покликанням;
- перевірити, що там один контейнер.
З описаним фреймворком для цього знадобилося 3 рядки: два – для дій і один – для перевірки контейнера. Хоча можна й не використовувати ексепшени. shouldBe вже виконує цю функцію. Просто так виходить наглядніше.
У Selenium те ж саме, але коду помітно більше. Спочатку треба відправити sendKeys. Потім додати click. Адже Google не має кнопки пошуку, і після введення тексту треба натискати Enter. При цьому доводиться переходити на body, натискати click і лише після цього – кнопку пошуку, яка запустить процес. Як бачите, все це займає більше часу.
Звісно, це простий тест, тому економія часу не така суттєва, як у проєкті з великою кількістю коду. Але навіть у такому разі набагато простіше створити базу з потрібними папками й нарощувати проєкт саме на Selenide. На стадіях розробки та підключення браузера ви точно заощадите час.
Тож нам залишається запустити тест. Я зробив це через IDE на одному браузері, оскільки немає сенсу перевіряти на обох – тести ж однакові. Тест пройшов успішно – за 37 секунд. Час виконання у цих фреймворків зазвичай майже однаковий.
Багаторазове повторення тих же процедур із визначенням однакових елементів, драйверів та успадкувань основного класу з інших – це все забирає багато часу та сил. З Selenide виходить простіше. Підключаєте фреймворк у будь-якій папці – і всі успадкування зроблено. Також можна створити окремі папки для XPath, body й тестів.
Вивчайте Selenide докладніше
Рекомендую офіційний сайт. На ресурсі ви знайдете багато корисної інформації: від туторіалів, як почати роботу з фреймворком, до покликань на Github. Selenide постійно оновлюється, і на сайті кожен апдейт супроводжується детальним описом нових нод, методів та іншим.
Також на сайті класно описаний розділ FAQ. Тут ви знайдете відповіді на поширені питання: як працювати з патернами, які патерни краще використовувати, які налаштування задавати тощо. У цьому розділі описується налаштування JVM-машини для IDE.
Сподіваюсь, ви переконалися, що Selenide – це справді незамінний інструмент для QA-автоматизатора. З ними ви будете присвячувати максимум зусиль безпосередню написанню тестів. А всю рутину фреймворк виконає за вас.
Підписуйтеся на ProIT у Telegram, щоб не пропустити жодну публікацію!