Огляд Selenide 7.5.1: кожному браузеру — свій config

Усі статті, обговорення, новини про тестування — в одному місці. Підписуйтеся на DOU | QA!

Цієї статті могло і не бути, але — не пройшло і двох тижнів — наполеглива редакція DOU все-таки знайшла когось, хто б її написав :). Зустрічайте оновлення Selenide до версії 7.5 — тут завезли одну суттєву фічу, зробили багфікс та покращили кілька дрібничок.

Оскільки попередній опублікований огляд стосувався версії 7.3, я також коротко опишу зміни 7.4 — тим більше що саме вона внесла багу, виправлену тепер. Отже...

Попередні зміни у версіях 7.4.0 — 7.4.3

Свіжі зміни у 7.5.0 — 7.5.1

Не дуже-то й тягне на статтю, правда? Але все-таки спробую детальніше оглянути головну фічу цього релізу, винесену у заголовок.

«allow to open every new browser with its own Configuration»

Це «нововведення» — відповідь на issue, занесене ще 2021 року. Андрія Солнцева осінило, що фічу можна реалізувати простіше, ніж здавалося — і от собі маємо. Проблема полягала в тому, що Selenide використовує статичні глобальні конфігурації в класі Configuration, звідки беруться налаштування для всіх піднятих сутностей браузерів. Це створювало очевидні незручності, зокрема issue reporter жалівся на неможливість паралельно тестувати на різних браузерах у Selenoid.

Іронічно, що буквально за тиждень до релізу у мене теж виникла потреба підіймати браузери з різними конфігураціями в межах одного suite, тож довелося костилити. Оскільки я і так передаю Selenide власну обгортку драйвера, то вдалося розв’язати проблему і без апдейтів — але тепер стало зручніше.

У методі Selenide.open з’явився другий параметр, тож за потреби задати відмінну від глобальної конфігурацію достатньо викликати open(config) або open(url, config). Ось простий приклад із самих селенідівських тестів:

open("/page_with_jquery.html", new SelenideConfig().browser("firefox").baseUrl(getBaseUrl()));

Але тут доводиться формувати конфігурацію з нуля, тому для спрощення життя у мінорній версії 7.5.1 додався метод Configuration.config(), який дозволяє повторно використати глобальні конфігурації, змінивши лише бажані параметри:

open("/page_with_jquery.html", config().browser("firefox"));

Ось така нехитра зміна — кожен сам собі вирішить, чи стане вона при нагоді. Підозрюю, що в більшості випадків це не є готовим рішенням для паралельного тестування на різних конфігураціях — доведеться трохи так підтюнити код вашого фреймворку, щоби скористатися фічею (особливо якщо Selenide.open викликається прямо у тілі тестів). Але можливість є — кому треба, використає.

Наостанок зауважу, що не обійшлося без дефектів: якесь issue уже занесли.

«Raise „bubbleable“ events when selection options in <select>s»

Для мене це — фікс дефекту, внесеного в 7.4.2, тому варто розглядати разом із комітом «Make $.selectOption*() trigger ’input’ event in addition to ’change’ event». Попередня реалізація взаємодії із <select> через методи SelenideElement.selectOptionByValue, selectOptionByText і подібні не тригерила всі події, які мали б відбуватися за реального вибору в дропдауні руцями.

На жаль, перша версія «покращення» поламала взаємодію, яка і так працювала — тепер це виправили. А також додали ще один event. Сподіваюся, зараз <select>’и доведені до пуття, і більше там нічого чіпати не будуть. Якщо ви, як і я, відкотили попереднє оновлення Selenide через оцю поломку — вже можна сміливо апдейтитися.

«Add few builder methods for DownloadOptions» / «don’t try to close any windows when downloading a file»

Маленький рефакторинг і фікс дефекту. Відтепер конструкції для перевірки скачування файлів можна скоротити. Було:

File downloadedFile = $(...).download(
    using(FOLDER)
        .withFilter(withExtension("txt"))
        .withAction(clickAndConfirm("Are you sure to download it?")
));

Стало:

File downloadedFile = $(...).download(
    file().withExtension("txt")
    .withAction(clickAndConfirm("Are you sure to download it?")
));

Другий коміт по download виправив дефект зі скачуванням в Edge. Поточні стандартні конфігурації Selenide відключають попередній перегляд файлів (наприклад, PDF) на користь негайного звантаження, тому нове вікно при цьому не відкривається. А відповідно, і закривачка вже непотрібна. Мабуть, залишкова логіка з часів старих конфігурацій..

«generate error details only once during error construction» / «don’t catch all errors»

Виправлення двох проблем, пов’язаних з формуванням та обробкою помилок. Раніше повідомлення про помилку генерувалося кожен раз при виклику e.getMessage(). Якщо використовувався власний ErrorFormatter, він працював у іншому потоці й міг попасти на закритий чи відсутній драйвер. Хтось звертався до розробників із таким питанням — тепер пофікшено.

Другий коміт стосується більше нутрощів Selenide — в обробнику SelenideElement був catch (Error error) замість catch (AssertionError error). Крім потенційних прихованих проблем це провокувало також нескінченні спроби скачування файлу в одному специфічному випадку (так, знову download — поточний реліз багатий на фікси в цій області).

Висновки

Невелике на перший погляд оновлення, хоча «під капотом» змінено десь сотню файлів. Можливість запускати браузери одночасно з різними конфігураціями комусь однозначно стане корисною. Ну а тих, хто просто оновлюється заради оновлень, можу порадувати — у мене після апдейту все працює як працювало (але гарантій не даю :).

Хочу подякувати редакції DOU, що підштовхнула мене глибше зазирнути у changelog — звернув увагу на ці download-методи, якими не користувався повною мірою.

А вас Selenide рятує від зайвих «велосипедів», як-от із цим скачуванням, чи навпаки змушує «костилити», як із конфігураціями?

👍ПодобаєтьсяСподобалось5
До обраногоВ обраному1
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Підписатись на коментарі