Привет, мерзляки!
У нас вышел релиз Selenide 7.13.0, начинаем анбоксинг!
- Смачно забафали скачивание файлов из Selenium Grid
- Скачивание файла не ждёт слишком долго, если ссылка не найдена
- Маскируем пароли в URL облака
- Добавили метод
proxy.cleanupFilters() - Удалили ворнинг о размере респонса
- Добавили префикс селенидовским прокси фильтрам
- Пофиксили рассинхрон видео
- Обновили Selenium с 4.38.0 на 4.39.0
Смачно забафали скачивание файлов из Selenium Grid
В селениде есть метод $.download(), который скачивает в браузере и возвращает этот файл.
Полезно для тестирования всяких там отчётов, экселек, пдфок и тому подобного.
Сама по себе это крайне нетривиальная операция. Под капотом у селенида реализовано несколько алгоритмов (HTTPGET, PROXY, FOLDER, CDP), у каждого свои плюсы и минусы. Не все, например, работают с удалённым браузером.
Так вот, метод FOLDER до сих пор плохо работал с Selenium Grid, особенно когда скачиваемый файл большой (допустим, больше 100 мб). А также не было надёжного способа дождаться полного окончания загрузки.
Теперь всё стало гораздо лучше:
- Мы можем отслеживать окончание загрузки по дате изменения файла (благодаря PR 16589), и
- Скачивание больших файлов кардинально ускорилось (благодаря PR 16627).
Пробовал скачивать из грида файлы аж до 4 гигабайт - летит с сервера, как из пушки. :)
См. PR 3207.
Скачивание файла не ждёт слишком долго, если ссылка не найдена
Ещё одно улучшение для скачивания больших файлов. Для таких файлов разумно задать большой таймаут, но небольшой “increment timeout”:
File pdf = $("#report").download(using(FOLDER)
.withTimeout(ofMinutes(10))
.withIncrementTimeout(ofSeconds(5))
.withName("report.pdf"));
В этом случае общий таймаут на скачивание 10 минут, НО если в течение 5 секунд не было никаких изменений в папке для скачивания, то метод выкинет ошибку сразу.
Так вот, если ссылка #report вообще не найдена, то метод падал через 10 минут.
Это всё-таки слишком долго, если тупо ошибся локатором.
А теперь будет падать через 5 секунд.
См. issue 3175 и PR 3212.
Маскируем пароли в URL облака
Возвращаясь к облакам. Селенид позволяет легко запускать браузер не только локально, а “удалённо”, т.е. на другой машине.
На всяких там Selenium Grid, BrowserStack, LambdaTest, Saucelabs, Selenoid, Moon и т.д.
Для этого надо всего лишь задать настройку remote:
Configuration.remote = "https://your-cloud-provider.com/wd/hub";
Иногда эти облака требуют сисурити, и тогда юзернейм-пароль можно прописать прямо в URL:
Configuration.remote = "https://username:password@your-cloud-provider.com/wd/hub";
Проблема в том, что селенид писал этот урл в логи, выставляя сисурити напоказ. Теперь будет маскировать:
23:00:10:763 [main] DEBUG WebDriverFactory - Creating webdriver in thread 1:
browser=chrome, browser.version=null, browser.size=1200x960,
remote=http://***:***@localhost:43008/wd/hub
См. issue 3210 и PR 3213.
Добавили метод proxy.cleanupFilters()
Удобно, чтобы удалить любые кастомные фильтры, добавленные вашими тестами.
Для удаления фильтров и раньше были методы proxy.removeRequestFilter(name) и proxy.removeResponseFilter(name),
но теперь их можно будет удалять проще, и не парясь с именами. Просто в конце каждого теста:
@AfterEach final void done() {
getSelenideProxy().cleanupFilters();
}
См. issue 3211 и PR 3215.
Удалили ворнинг о размере респонса
Когда вы включаете селенидовский прокси, он среди прочего начинал отслеживать размер запроса или ответа сервера, и писал ворнинги, если размер превышал 2 мб. Когда-то это казалось хорошей идеей, но теперь мы решили, что это не входит в зону ответственности селенида. У вас наверняка есть более подходящие средства мониторинга и оптимизации. А наш прокси без них будет эффективнее работать.
Но если вам прямо очень нравились эти предупреждалки, может сами добавить в прокси точно такие же фильтры, но в своих тестах.
См. PR 3215.
Добавили префикс селенидовским прокси фильтрам
В селениде есть встроенный прокси-сервер, который слушает трафик между браузером и сервером, и позволяет делать из тестов всякие интересные штуки. Скачивать файлы, обходить авторизацию, подменять ответы сервера и т.п.
Для этого в прокси можно добавлять свои фильтры, каждый под свои уникальным именем (чтобы можно было потом его удалить). У селенида есть несколько своих фильтров, которые удалять не рекомендуется.
Теперь у них всех будет одинаковый префикс “selenide.proxy.filter.”, чтобы вы их точно со своими не перепутали.
См. issue 3211 и PR 3215.
Пофиксили рассинхрон видео
В селениде уже год как есть видео рекордер, но недавно обнаружили одну проблему. Проявлялась она с высоким FPS, но медленным браузером.
Если вы запросили снимать видео с FPS=30, а браузер тормозил и смог делать только по 10 скриншотов в секунду, то итоговое видео получалось в 3 раза быстрее, чем в реальности. :)
Теперь видео должно быть нормальной скорости.
См. issue 3189 и PR 3197.
Обновили Selenium с 4.38.0 на 4.39.0
И подняли версию CDP с v142 до v143.
Лично для меня это большое событие, т.к. в этот релиз попало сразу несколько моих изменений, и все они как раз пригодились в нашем сегодняшнем релизе:
- Download large files from Grid
- Show file modification time
- make augmentation of HasBiDi/HasDevTools lazy-loaded
- add BiDi method BrowsingContext.setViewport(null, null) to reset the mobile emulation mode
- unwrap double-wrapped webdriver
- Avoid logging debug logs with INFO level
- switch DevTools connection between tabs/windows
См. PR 3202
Ну что,
Праздник уже стучится к вам?
ru.selenide.org
14.12.25