Привет, мерзляки!
У нас вышел релиз 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 гигабайт - летит с сервера, как из пушки. :)
NB! Важно обновить и сам Selenium Grid тоже. Если он остался старый, а вы обновите только клиентскую часть (т.е. версию Selenide) - это не поможет.
См. 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