Привет!
У нас вышел релиз Selenide 7.14.0!
У нас есть практически концепция релиза.
Я думаю, что это будет очень выгодный релиз для Селенида, а также для вас самих.
- Исправили скачивание файлов с пробелом в имени
- Исправили скачивание файлов с грида, который отстаёт на 1 секунду
- increment timeout для грида
- Запретили удалять внутренние прокси-фильтры Селенида
- Удалить все реквест-фильтры (или все респонс-фильтры)
- Добавили метод для маскировки значений
- Видео рекордер можно использовать без Селенида
- Сократили формат таймаутов в ошибках и логах
- Обновили Selenium с 4.39.0 на 4.40.0
Исправили скачивание файлов с пробелом в имени
Ну это классика.
Селенидовский метод $.download(), который скачивает файл в браузере, внезапно неправильно обрабатывал пробелы в имени файла.
Ну как же так, Анатолич…
В общем, теперь такие файлы прекрасно скачиваются - как локально, так и с Грида:
File report = $("#report").download(withExtension("pdf"));
assertThat(report.getName())
.isEqualTo("Отчёт 0 & _ ' `backticks`.pdf");
См. PR 3231.
Исправили скачивание файлов с грида, который отстаёт на 1 секунду
Вот это огонь история!
Селенидовский метод $.download(FOLDER) работал так:
- Клик по кнопке
- Жди, пока в папке появится файл новее, чем момент клика.
А теперь представьте, что браузер запускается на Гриде, у которого системное время отстаёт от настоящего на одну секунду.
Вся беда в том, что на втором шаге мы сравниваем время на тестовой тачке со временем на гриде - а время-то может быть разным. :(
- Изначально-то этот алгоритм был сделан только для локального запуска. И алгоритм работал.
- Потом добавили плагин для Грида. Но алгоритм по-прежнему работал, потому что Грид не умел выдавать время изменения файла.
- А в Selenium 4.39.0 Грид научился возвращать время изменения файла, и вот тогда наш алгоритм сломался. :)
Большое спасибо Mikita Yafimuk за дебаг изначальной проблемы. Без тебя я бы в жизни не допёр, что всё дело в этой секунде!
См. issue 3227 и PR 3240.
increment timeout для грида
Тоже скачивание файлов с грида.
В селениде есть параметр “incrementTimeout”, который полезен при скачивании очень больших файлов. Тогда разумно задать
- большой таймаут (скажем, если файл реально может скачиваться пару минут), но
- небольшой “incrementTimeout” (чтобы не ждать слишком долго, а упасть побыстрее, если нет вообще никакого прогресса).
File bigReport = $("#slowReport").download(using(FOLDER)
.withIncrementTimeout(ofSeconds(5L))
.withTimeout(ofMinutes(5L))
);
И вот опять же, этот параметр фактически не использовался для грида. Причина та же самая: грид раньше не выдавал время изменения файла, а теперь выдаёт.
Ну, а селенид теперь научился его учитывать для определения прогресса.
См. issue 3233.
Спасибо Aliaksandr Rasolka за PR 3234.
Запретили удалять внутренние прокси-фильтры Селенида
В Селениде есть встроенный прокси-сервер. Позволяет слушать траффик, логировать и мокать ответы сервера и т.п. Этому прокси вы можете добавлять и удалять свои фильтры:
SelenideProxyServer proxy = getSelenideProxy();
proxy.addRequestFilter("proxy-usages.request", () -> ...);
proxy.removeRequestFilter("proxy-usages.request");
Но у Селенида есть и несколько своих собственных фильтров.
И метод removeRequestFilter позволял их удалить, что могло привести к непредсказуемым последствиям.
Больше не позволяет:
proxy.removeResponseFilter("selenide.proxy.filter.download"));
// throws "The built-in selenide proxy response filter cannot be removed: selenide.proxy.filter.download"
Надеюсь, вы такими грязными делишками и не занимались. ;)
Спасибо Aliaksandr Rasolka за PR 3221.
Можно удалить все реквест-фильтры (или все респонс-фильтры)
Но зато вы можете одним методом удалить все реквест-фильтры (или все респонс-фильтры). Удобно, чтобы в конце теста подчистить всё, не запоминая, какие тесты какие фильтры добавляют.
@AfterEach void resetProxy() {
SelenideProxyServer proxy = WebDriverRunner.getSelenideProxy();
proxy.cleanupRequestFilters(); // All request filters (except Selenide owns)
proxy.cleanupResponseFilters(); // All response filters (except Selenide owns)
proxy.cleanupFilters(); // all request and response filters (except Selenide owns)
}
Спасибо Aliaksandr Rasolka за PR 3221.
Добавили метод для маскировки значений
Есть в Селениде метод type(text("...")). По сути тот же sendKeys(), но с дополнительным опциями:
- очистка поле перед вводом,
- эмуляция медленного ввода
- и т.д.
А теперь появилась возможность пометить значение как “sensitive”, и тогда его значение будет маскироваться в отчётах и логах:
$("#password").type(text("Secure info"));
$("#password").type(text("Secure info").sensitive());
+----------------+----------------------+-------+-------+
| ...
| #password | type("Secure info") | PASS | 2548 |
| #password | type("***********") | PASS | 2533 |
| ...
+----------------+----------------------+-------+-------+
Спасибо Aliaksandr Rasolka за PR 3226.
Видео рекордер можно использовать без Селенида
Как вы знаете, в Селениде есть козырная фича - видео рекордер. И теперь его можно подключить к любому другому проекту на Selenium, который не использует Селенид.
Может быть очень полезно, чтобы поизучать флейки тесты, запилить демо и т.д.
Или убедить коллег, что им срочно нужно перейти на Селенид. :)
Инструкция в PR 3230.
Сократили формат таймаутов в ошибках и логах
Чтобы текст ошибки было проще читать (особенно когда таймаут фигурирует в середине предложения), мы убрали пробел и точку. Теперь все таймауты в селениде выводятся в едином формате:
| Было | Стало |
|---|---|
| Timeout: 2 ms. | Timeout: 2ms |
| incrementTimeout: 1000 | incrementTimeout: 1s |
| Failed to download file in 120000 ms | Failed to download file in 120s |
См. PR 3235.
Обновили Selenium с 4.39.0 на 4.40.0
И подняли версию CDP с v143 до v144.
См. PR 3237
И снова в этом релизе Selenium было много моих изменений, так что кайф.
- Unify error message format for all Expected Conditions
- fix downloading files with spaces in names (from Grid)
- Use ClientConfig provided by user instead of the default one
- preserve original file’s modification time when uploading to Grid
- Change BiDi “internalId” type from Long to String
Самое смешное - это, конечно, эпичный факап с логированием в тестах самого селениума. Эт прям жыыыр :)
Это лучше, чем просто обычный релиз — этот релиз будет действовать вечно.
ru.selenide.org
21.01.26