Давно не виделись, котаны!
Последний пресс-релиз я писал в апреле. С тех пор мы выпустили несколько релизов, из которых самый объёмный - 7.4.0.
Но теперь по-любому пора обновиться на Selenide 7.5.0:
- Открывать браузер с новой конфигурацией
- Починили события в селектах
- Укоротили API для скачивания файлов
- Больше не закрываем окна при скачивании файлов
- Больше не ловим вообще все ошибки
- Починили кастомные обработчики ошибок
- Обновили зависимости
- Новости
- Статистика
Можно открывать браузер с новой конфигурацией
В Селениде есть один нюанс, неочевидный для начинающих: все настройки в классе Configuration
- статические.
Поменяешь настройку в одном тесте - она повлияет на остальные. Особенно это важно при запуске параллельных тестов.
Это, так сказать, не бага, а фича: там собраны настройки, которые вроде как и не надо менять от теста к тесту. А те значения, которые реально могут быть разными, мы давно вынесли в параметры разных методов:
$.click(usingJavaScript()); // вместо Configuration.clickViaJs = true
$.download(using(PROXY)); // вместо Configuration.fileDownload = PROXY
Подробнее об этом процессе я рассказывал здесь.
Но оставалась ещё одна настройка Configuration.browserCapabilities
.
Иногда нужно в разных тестах задавать разные капабилити - например, чтобы задавать имя видео в Selenoid.
Строго говоря, это было возможно и раньше - просто запуская вебдрайвер из своего кода с любыми нужными настройками.
Но теперь их можно задать прямо в методе open
:
@Test void testWithoutProxy() {
open("/one", new SelenideConfig().proxyEnabled(false).fileDownload(FOLDER));
File report = $("#report").download();
}
@Test void testWithProxy() {
open("/two", new SelenideConfig().proxyEnabled(true).fileDownload(PROXY));
File cv = $("#cv").download();
}
Смотрите не злоупотребляйте.
NB! Когда вы вызываете метод open(url, config)
, а какой-то браузер уже открыт в этом потоке (предыдущим тестом), то селенид его закроет.
Это может привести к замедлению ваших тестов из-за постоянного переоткрывания браузеров. Имейте в виду.
См. issue 1372 и PR 2846.
Починили события в селектах
В Selenide 7.4.2 мы улучшили работу с селектами в Vue.js:
стали кидать события input
в дополнение к change
.
Но при этом мы случайно изменили сами события: они больше не “bubbleable”.
Что сломало обработку селектов в каких-то других фреймворках (когда обработчик события change
висит не на самом селекте, а на его родителе).
В общем, теперь починили. Смело выбирайте опции в ваших любимых селектах любыми способами:
$("#migrants").selectOption("Похищают домашних животных");
$("#migrants").selectOptionContainingText("дят собак и кош");
$("#migrants").selectOption(2);
$("#migrants").selectOptionByValue("kill-ducks-from-parks");
См. issue 2832 и PR 2835.
Укоротили API для скачивания файлов
Чтобы скачать файл с расширением “.txt”, раньше надо было написать довольно длинное выражение:
File f = $.download(using(FOLDER).withFilter(withExtension("txt")));
Теперь можно будет писать короче:
import static com.codeborne.selenide.DownloadOptions.file;
File f = $.download(file().withExtension("txt")));
В целом алгоритм прост: пишешь download(file().
- и после точки выскакивают доступные варианты.
См. PR 2841.
Больше не закрываем окна при скачивании файлов
Тут вот какая история. В селениде есть 4 метода скачивания файлов (HTTPGET, FOLDER, PROXY, CDP), и два из них (FOLDER, PROXY) изначально работали по такому принципу:
- Кликает элемент
- Ждёт, пока появится новый файл
- Если после клика появилось новое окно/вкладка - закрывает его
- Возвращает файл
И вот сейчас мы пришли к пониманию, что третий шаг вроде как и не нужен. Никто уже и не помнит, зачем он изначально был добавлен. ¯_(ツ)_/¯
Теперь селенид не будет пытаться закрыть никаких окон. Если у вас с этим проблема - обращайтесь, обкашляем вопросик. :)
См. issue 2836 и PR 2840.
Больше не ловим вообще все ошибки
И снова ломаем устои. :)
Главный алгоритм Селенида - это по сути try/catch внутри цикла (до достижения 4 секунд).
И очень важный вопрос - какие именно ошибки ловить внутри этого try/catch.
Много лет там стояло catch (Error error)
. По всем канонам - плохая практика в Java.
Никто уже точно не помнит, почему. Возможно, из-за Internet Explorer, который когда-то кидал java.lang.Error
в случае невалидного XPath.
А проблема в том, что этот catch (Error error)
может скрывать серьёзные проблемы, при которых тест должен не ретраить в цикле, а сразу падать.
Что-то в духе OutOfMemory error.
В общем, теперь мы не ловим Error
и надеемся, что ни у кого ничего не сломается, ибо Internet Explorer давно показывает веб-странички Пригожину и Кобзону.
См. PR 2845.
Починили кастомные обработчики ошибок
Ой, пофиг, лень расписывать. :)
Если вы переопределяете класс SelenideErrorFormatter
,
читайте issue 2830 и PR 2839.
Обновили зависимости
- bump BrowserUpProxy from 2.2.18 to 2.2.19
- bump dnsjava from 3.6.0 to 3.6.1
- bump LittleProxy from 2.2.4 to 2.3.0 (#2837)
Новости
- Мой видос How to migrate from Selenium to Selenide for more stable tests! с SeleniumConf 2024
- Мой видос Selenide: Enjoy Writing Automated Tests for Mobile & Web с Testμ 2024 (LambdaTest)
- Мой видос How to debug autotests с конференции EpicHey 2023
- Статьё Selenium or Selenide: Which Testing Framework Best Fits Your Needs?
- Статьё Test smells: cleaning up E2E tests by Natalia Poliakova, Mikhail Lankin
- Видос про Селенид на испанском! by Jose Diaz
- И ещё на турецком! by Ahmet Bayram Ders
- Введение Selenide для QA Auto. Что такое Selenide? на канале QA Automation и SDET
- То же, вид из шортов
- И наконец-то про коммиты на английском: WTF Commit messages
Статистика
Количество скачиваний побило новый рекорд - 1.154.002 за август!
ru.selenide.org
15.09.24