Вышла Selenide 7.5.0

Вышла Selenide 7.5.0

Нестатическая конфигурация
15.09.24

Давно не виделись, котаны!

Последний пресс-релиз я писал в апреле. С тех пор мы выпустили несколько релизов, из которых самый объёмный - 7.4.0.

Но теперь по-любому пора обновиться на Selenide 7.5.0:


Можно открывать браузер с новой конфигурацией

В Селениде есть один нюанс, неочевидный для начинающих: все настройки в классе 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) изначально работали по такому принципу:

  1. Кликает элемент
  2. Ждёт, пока появится новый файл
  3. Если после клика появилось новое окно/вкладка - закрывает его
  4. Возвращает файл

И вот сейчас мы пришли к пониманию, что третий шаг вроде как и не нужен. Никто уже и не помнит, зачем он изначально был добавлен. ¯_(ツ)_/¯

Теперь селенид не будет пытаться закрыть никаких окон. Если у вас с этим проблема - обращайтесь, обкашляем вопросик. :)

См. 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)


Новости


Статистика

Количество скачиваний побило новый рекорд - 1.154.002 за август!


Андрей Солнцев

ru.selenide.org

15.09.24