Привет!
У нас вышел релиз Selenide 7.15.0!
Буквально несколько минут назад мы начали Операцию “Эпическая Ява”.
Огромный новый релиз нашей Java-библиотеки.
Никто не делает Java-библиотеки так, как мы. Никто.
Мы исправили баги. Мы уничтожили медленный код. Полностью.
А производительность? Потрясающая производительность. Лучшая из всех, что вы когда-либо видели.
В селениде есть метод $.download(), позволяющий из теста скачать файл. Обычно это стоит делать для того, чтобы проверить название и содержимое скачанного файла. Или хотя бы формат (pdf/xls/csv/…).
Но иногда эти файлы бывают огромные, а в тесте мы просто хотим проверить, что файл скачивается без ошибок - и не засорять диск. В таких случаях теперь можно будет скачивать файл без содержимого:
File distribution = $.download(file().withoutContent());
assertThat(distribution).hasExtensions("zip");
Особенно это актуально, когда браузер бежит не локально, на каком-нибудь гриде. Вспоминаем проблему со скачиванием больших файлов из грида.
P.S. Но вообще случай редкий. Так-то я скорее советую не качать слишком большие файлы в тестах. И настроить тестовую среду, чтобы в ней всё быстро скачивалось. И настроить CI так, чтобы артефакты предыдущих билдов вовремя подчищались и не засоряли диск.
См. PR 3264.
Оказалось, что селенид неправильно запускал Хром, если вы добавляли ему ключик debuggerAddress:
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("debuggerAddress", "127.0.0.1:9222");
Теперь запускает без проблем.
Вообще это интересный ключик: он говорит вебдрайверу не запускать новый браузер, а подключиться к уже запущенному браузеру. Никогда этим не пользовался ¯¯\(ツ)/¯¯
См. issue 3265 и PR 3266.
Начиная с версии 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, позволяющее проверить одно из условий. И там оказалась логическая ошибка в случае, когда искомые элемент был, да сплыл. :)
Обычная проверка для исчезнувшего элемента работает:
$("#missing").should(disappear);
А вот or проверка - нет:
$("#missing").should(disappear.or(text("I don't exist")));
Эта строчка кидала Element not found {#missing} (и это нелогично).
А теперь будет работать без ошибок.
См. issue 3255 и PR 3256.
Но вообще-то я не советую использовать
orв тестах. Тест ведь должен точно знать ожидаемое поведение приложения.
И подняли версию CDP с v144 до v145.
См. PR 3252
11.03.26