Вышла Selenide 7.3.1

Вышла Selenide 7.3.1

Мильон!
28.04.24

Добро утро!

Мы выпустили Selenide 7.3.1.

Релиз небольшой, так что обновиться будет прям легко. Приступаем к распаковке:


Мокать ответ сервера заданного типа

Как вы помните, Селенид позволяет через прокси подменить ответ сервера:

getSelenideProxy().responseMocker().mockText("cik-mock",
  urlStartsWith(GET, "https://cik.ru/api/gov/no/referendum"), 
  () -> "{votes: 2133326, for: 99.23, against: 0.77}");

Но при этом невозможно было задать тип контента (xml, json и т.п.). А иногда это важно. Теперь можно задать любые заголовки для ответа сервера, в т.ч. Content-Type:

import org.openqa.selenium.remote.http.HttpResponse;

getSelenideProxy().proxyMocker().mockResponse("cik-mock", 
  urlStartsWith(GET, "https://cik.ru/api/gov/no/referendum"), () -> new HttpResponse()
      .setStatus(429)
      .addHeader("Content-Type", "application/json")
      .setContent(utf8String("{votes: 2133326, for: 99.23, against: 0.77}"))
  );

См. issue 2705 и PR 2706.


Исправили метод $.clear() в мобилках

… для элемента, который существует, но невидим.

Оказывается, что вызов clear или click в мобилках:

$("#hiddenElement").clear();

Падал с некорректным сообщением, если элемент найден, но невидим (например, перекрыт другим элементом):

Element should be interactable {By.name: ComputeSumButton}
Element: '<XCUIElementTypeButton ... visible="false">...

Caused by: 
  UnsupportedCommandException: 
    Unhandled endpoint: /session/28...13/element/07000000-0000-0000-CF35-000000000000/css/opacity ...

Теперь сообщение будем корректным, без всяких там UnsupportedCommandException:

Element should be visible {By.name: ComputeSumButton}

См. issue 2722 и PR 2723.


Похожая проблема. Если в Firefox попытаться кликнуть на некорректную ссылку (например, https://zopa):

  $("#invalid-link")
    .shouldHave(attribute("href", "https://zopa"))
    .click();

то Селенид выдавал некорректное сообщение об ошибке:

Element not found {#link}
Expected: clickable: interactable and enabled

Теперь будет честный текст ошибки:

WebDriverException: Reached error page: about:neterror?e=dnsNotFound&u=https%3A//zopa/
                    Build info: version: '4.20.0', revision: '866c76ca80'

P.S. Интересно, что такую ошибку выдаёт только Firefox. Остальные браузеры спокойно показывают стандартную страницу с текстом:

This site can’t be reached
Check if there is a typo in example.
DNS_PROBE_FINISHED_NXDOMAIN

См. issue 2725 и PR 2727.


Отключили предупреждение Хрома про сворованные пароли

Снова. Уже отключали в PR 2662, но там мы добавили настройку profile.password_manager_enabled=false, и этого оказалось мало. Теперь докинули ещё и настройку profile.password_manager_leak_detection=false.

См. PR 2729.


Исправили загрузку файлов через CDP для кастомных вебдрайверов

Как вы помните, несколько месяцев назад вы реализовали новый способ скачивания файлов через CDP. Работает он только в Chromium-based браузерах (Chrome, Edge etc.).

Но вот в случае кастомного вебдрайвера проверка “а хром ли это” не срабатывала:

Configuration.fileDownload = CDP;
Configuration.browser = MyCustomChromedriverFactory.class.getName();

File report = $("#report").download();
// летела ошибка: java.lang.IllegalArgumentException: 
// The browser you selected "MyTest$CustomWebDriverProvider" doesn't have Chrome Devtools protocol functionality.

Теперь селенид правильно распознаёт Chromium-based браузеры по их реальным капабилитям. Обожаю это слово. :)

Спасибо Petr Ovcharenko за PR 2728.


Задеприкейтили настройку holdBrowserOpen

Есть такой флажок в Селениде - если его установить, то Селенид не будет закрывать браузер после прогона тестов. Иногда люди хотят оставить браузер открытым, чтобы после теста поковыряться в нём, что-то там поизучать и поотлаживать.

Лично мне никогда не нравилась эта фича, и я давно хотел её удалить. Но теперь появилась веская причина: внезапно мы осознали, что фича вредная. Когда вы поковыряетесь в браузере и закроете его руками, вебдрайвер-то никто уже не закроет, и он останется висеть в памяти и жрать ресурсы.

Поэтому вместо holdBrowserOpen лучше напишите где-нибудь в своём тесте sleep(600_000) и ковыряйтесь на здоровье.

Кто знает, почему именно 600 секунд? Олды тут?

См. PR 2730.


Обновили Selenium с 4.19.1 до 4.20.0

В ченджлоге Selenium, честно говоря, больших изменений не вижу. Ну разве что добавили поддержку CDP 124 и убрали 121.

См. PR 2726.


Статистика

Случилось!!!

Количество ежемесячных скачиваний Селенида перевалило за … миллион!


Андрей Солнцев

ru.selenide.org

28.04.24