Привет!
У нас вышел релиз Selenide 7.15.0!
Буквально несколько минут назад мы начали Операцию “Эпическая Ява”.
Огромный новый релиз нашей Java-библиотеки.
Никто не делает Java-библиотеки так, как мы. Никто.
Мы исправили баги. Мы уничтожили медленный код. Полностью.
А производительность? Потрясающая производительность. Лучшая из всех, что вы когда-либо видели.
- Скачивать файл без контента
- Chrome driver в режие “remote debugger”
- ### Скриншоты в Хроме, когда CDP выклюен
- Ограничили время выполнения всех команд
- Размер видео, когда окно браузера менялось в течение теста
- Условие “OR” для исчезнувших элементов
- Обновили Selenium с 4.40.0 на 4.41.0
- Ссылки
Скачивать файл без контента
В селениде есть метод $.download(), позволяющий из теста скачать файл. Обычно это стоит делать для того, чтобы
проверить название и содержимое скачанного файла. Или хотя бы формат (pdf/xls/csv/…).
Но иногда эти файлы бывают огромные, а в тесте мы просто хотим проверить, что файл скачивается без ошибок - и не засорять диск. В таких случаях теперь можно будет скачивать файл без содержимого:
File distribution = $.download(file().withoutContent());
assertThat(distribution).hasExtensions("zip");
Особенно это актуально, когда браузер бежит не локально, на каком-нибудь гриде. Вспоминаем проблему со скачиванием больших файлов из грида.
P.S. Но вообще случай редкий. Так-то я скорее советую не качать слишком большие файлы в тестах. И настроить тестовую среду, чтобы в ней всё быстро скачивалось. И настроить CI так, чтобы артифакты предыдущих билдов вовремя подчищались и не засоряли диск.
См. PR 3264.
Chrome driver в режие “remote debugger”
Оказалось, что селенид неправильно запускал Хром, если вы добавляли ему ключик debuggerAddress:
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("debuggerAddress", "127.0.0.1:9222");
Теперь запускает без проблем.
Вообще это интересный ключик: он говорит вебдрайверу не запускать новый браузер, а подключиться к уже запущенному браузеру. Никогда этим не пользовался ¯¯\(ツ)/¯¯
См. issue 3265 и PR 3266.
Скриншоты в Хроме, когда CDP выклюен
Начиная с версии Chrome 144, CDP по умолчанию выключен. А Селенид пытался его использовать для видео и скриншотов - и падал.
Теперь при выключенном CDP Селенид не падает, а переключается в старый добрый вебдрайверовский метод getScreenshotAs.
См. issue 3243 и PR 3245.
Ограничили время выполнения всех команд
При скачивании огромных файлов из Грида такая команда могла подвиснуть надолго:
File distribution = $.download(); // from Grid with some networking issues
Ну, если там какие-то непредвиденные проблемы с сеткой и т.п.
Вся проблема в том, что у Селенида есть таймаут на любую команду, но проверялся он только при ретрае. А вот если подвисло выполнение самой первой попытки, то таймаут не форсился.
Теперь Селенид насильно прерывает выполнение любой команды, если она длиться дольше, чем N+5 секунд (5 - чисто на всякий случай).
$.shouldBe(visible); // Прервётся через 4+5 секунд
$.shouldBe(visible, Duration.ofSeconds(50)); // Прервётся через 50+5 секунд
$.download(file().withTimeout(ofMinutes(3))); // Прервётся через 3 минуты и 5 секунд
См. issue 3251 и PR 3263.
Размер видео, когда окно браузера менялось в течение теста
Про наш видео рекордер вы уже наслышаны. Для простоты, мы с самого начала сделали допущение, что размер браузера в течение теста не меняется.
Теперь мы доработали алгоритм.
Если в течение теста размер браузера меняется (а значит, мы снимает пачку скриншотов разного размера), то теперь селенид смонтирует видео с размерами самого большого скриншота, так что все они поместятся на видео.
См. PR 3262.
Условие “OR” для исчезнувших элементов
Обычное я советую не использовать or в тестах.
Тест ведь должен точно знать ожидаемое поведение приложения.
В селениде есть условие or, позволяющее проверить одно из условий.
И там оказалась логическая ошибка в случае, когда искомые элемент был, да сплыл. :)
Обычная проверка для исчезнувшего элемента работает:
$("#missing").should(disappear);
А вот or проверка - нет:
$("#missing").should(disappear.or(text("I don't exist")));
Эта строчка кидала Element not found {#missing} (и это нелогично).
А теперь будет работать без ошибок.
См. issue 3255 и PR 3256.
Обновили Selenium с 4.40.0 на 4.41.0
И подняли версию CDP с v144 до v145.
См. PR 3252
Ссылки
- Курс HillelMax про Selenide - “ЦЕ ПОТУЖНЫЙ ФРЕЙМВОРК!”
- пост UI Automation with Selenide в блоге Jithin Somaraj
- пост Automating UI tests: Selenide & Java with Optimizely demo в блоге First Line Software
- пост Несколько мобильных приложений в одном Appium‑проекте на хабре от Igor Pavlov
ru.selenide.org
11.03.26