Всем привет!
Мы выпустили Selenide 7.6.0 с чем-то вкусненьким и интересненьким.
Йоу-йоу, погнали обновляться!
Видосики — вещь серьезная.
Если есть видосики, значит они что-то отражают.
Что нового:
- Добавили видео рекордер
becauseдля условий вебдрайвера- метод
$.scrollIntoCenter() - Поддержка специальных пробелов
- Исправили
inNewBrowserс кастомной конфигурацией - Исправили аппиумскую пэдж фактори
- Уменьшили количество селенидовских логов
- Подправили поведение
Selenide.screenshot(filename) - JSR305 -> JSpecify
- Упростили кастомные команды
- Обновили зависимости
- Новости
- Статистика
Добавили видео рекордер
А вот наконец-то!
У всех бывают нестабильные тесты. Моргающие тесты. Flaky tests.
Если эта тема для вас в новинку, я вам завидую. Вас ждёт увлекательное погружение в
Flaky Tests
Flaky Tests 2
Flaky tests. Порядок имеет значение
Flaky tests. Метод
Так вот, при расследовании моргающих тестов очень помогают видосики. И теперь Селенид умеет их делать из коробки.
Когда-то мы много пользовались библиотекой VideoRecorder от Сергея Пирогова, и она же позволила мне сделать все вышеупомянутые доклады. Но теперь Сергей собирает дроны для ВСУ и опенсорсом временно не занимается.
Такие времена. :(
Как начать записывать видосы?
Просто
- Замените зависимость
selenide:7.6.0наselenide-video-recorder:7.6.0 - Повесьте на ваши тесты расширение
org.selenide.videorecorder.junit5.VideoRecorderExtension(в случае JUnit5) - Повесьте на ваши тесты листенер
org.selenide.videorecorder.testng.VideoRecorderListener(в случае, прости господи, TestNG) - Повесьте аннотацию
@Videoна нестабильные тесты (их ведь немного?)
Теперь селенид начнёт записывать видосы для всех помеченных тестов.
НО
сохранять видос будет только в том случае, если тест упал. Ссылка на видео будет автоматически добавлена к
сообщению об ошибке - так же, как ссылка на скриншот.
Element should have text "Орешник"
Actual value: text="Кокошник"
Screenshot: file:/.../build/reports/tests/1732761758509.0.png
Page source: file:/.../build/reports/tests/1732761758509.0.html
Video: file:/.../build/reports/tests/1732761754743.0.webm
Как это работает?
В начале каждого помеченного теста Селенид запускает два потока:
- Регулярно снимает скриншоты браузера и складывает в очередь (пока в памяти)
- Сливает скриншоты из очереди в видео (используя библиотеку
org.bytedeco:javacv)
В конце теста видео либо удаляется, либо сохраняется в файл и прикрепляется к сообщению об ошибке.
P.S. Это поведение и некоторые параметры можно настраивать в файле selenide.properties, см.
VideoConfiguration.
NB! Имейте в виду, что запись видео жрёт ресурсы и замедляет работу компьютера. Используйте точечно.
См. issue 2145.
Спасибо Sergey Brit за PR 2768,
Также см. PR 2890 с аннотациями-конфигурациями.
Добавили because для условий вебдрайвера
Теперь можно написать не просто:
webdriver().shouldHave(numberOfWindows(2)));
webdriver().shouldHave(url("https://dictionary.cambridge.org")));
а с пояснением:
webdriver().shouldHave(
numberOfWindows(2).because("Логин должен открыться в новом окне"));
webdriver().shouldHave(
url("https://dictionary.cambridge.org/").because("WTF is Oreshnik?"));
Спасибо Daniil Moiseev за PR 2853.
Добавили метод $.scrollIntoCenter()
По сути это то же самое, что $.scrollIntoView("{block: 'center'}"), просто короче.
Ведь в большинстве случаев, когда мы скроллим, мы хотим именно этого.
$("#logout")
.scrollIntoCenter()
.shouldHave(text("Мутная кнопка где-то внизу экрана"))
.click();
См. PR 2842.
Поддержка специальных пробелов
Когда мы ищем веб-элемент по тексту или проверяем текст элемента, нам надо игнорировать пробелы (как правило).
Ведь по спецификации html, несколько идущих подряд пробелов (а также символов , табов и т.п.) считаются за один.
До сих пор Селенид трактовал таким образом несколько пробельных символов (<space>, <tab>, , <newline>).
Но оказалось, что различных извращённых пробелов гораздо больше (т.н. “En Space”, “Em Space”, “Three-Per-Em Space” и т.д.).
Теперь мы их всех умеем игнорировать. :)
Например, для такой вот веб-странички:
<div id="hero">
Аху         ⁠  
      Дарьяи
</div>
Будет работать такой тест:
$("#hero").shouldHave(text("Аху Дарьяи"));
$(byText("Аху Дарьяи")).ancestor().shouldHave(
text("Произнесите её имя и расскажите её историю."));
Спасибо Daniil Moiseev за PR 2858.
Также см. PR 2884.
Исправили inNewBrowser с кастомной конфигурацией
Это редко используется, так что не заморачивайтесь. Но для отчётности надо упомянуть.
Во-первых, добавили метод inNewBrowser с возможностью открытия браузера с кастомной конфигурацией:
inNewBrowser(Config config, Runnable lambda)
Во-вторых, исправили старый метод inNewBrowser(Runnable lambda), если внутри него использовалась кастомная конфигурация
(в этом случае при закрытии браузера предыдущая конфигурация не восстанавливалась).
См. issue 2859 и PR 2902.
Исправили аппиумскую пэдж фактори
Исправили багу в selenide-appium, когда тест пытался создать не мобильный, а обычный вебовский пэдж обжект.
Причём до того, как веб-браузер открыт.
Спасибо Petro Ovcharenko за PR 2879.
Уменьшили количество селенидовских логов
Мы пересмотрели логи, которые пишет Selenide, и превратили некоторые “info” логи в “debug”.
Другими словами, теперь в логах должно быть меньше спама.
Если понадобится отлаживать какую-то сложную проблему, включайте уровень “debug”. ;)
См. PR 2892.
Подправили поведение Selenide.screenshot(filename)
У него в javadoc было написано, что он сохраняет оба файла - “.html” и “.png”. А на самом деле сохранял только “*.png”. Теперь поведение соответствует описанию.
См. issue 2896 и PR 2901.
JSR305 -> JSpecify
Многие селенидовские методы помечены аннотациями @Nullable, @Nonnull, @CheckReturnValue, @ParametersAreNonnullByDefault.
Это чтобы вам их легче было использовать, и IDE подсказывала вам какие-то типичные косяки:
$("h1"); // Упс, кто-то забыл проверку: .shouldBe(visible)
Так вот, до сих пор эти аннотации мы брали из библиотеки “JSR 305” (соответственно, аннотации импортировали из пакета javax.annotation).
Но эта библиотека уже давно не поддерживается. А недавно ей на замену выпустили новую библиотеку JSpecify.
И Селенид перешёл на неё. Теперь аннотации импортируются из пакетов org.jspecify.annotations и com.google.errorprone.annotations.
См. PR 2889.
Упростили кастомные команды
Если вы создавали свой подкласс от Click, SetValue или других селенидовских команд, то мы вам случайно поломали
обратную совместимость. Прастите. :)
Теперь вместо метода
public SelenideElement execute(SelenideElement proxy, WebElementSource locator, Object [] args) { ... }
вам нужно будет имплементировать метод
protected void execute(WebElementSource locator, Object @Nullable [] args) { ... }
Но так ведь короче и проще, правда же?
Но в целом, если у вас проект компилируется, то не парьтесь, вас это не касается. :)
См. issue 2906 и PR 2889.
Обновили зависимости
- bump Selenium from 4.25.0 to 4.26.0 (incl. CDP 129 -> 130)
- Bumps BrowserUpProxy from 2.2.19 to 3.0.0.
- Bump LittleProxy from 2.3.0 to 2.3.2
- Bump Netty from 4.1.113.Final to 4.1.115.Final
- Bump Guava from 33.3.0-jre to 33.3.1-jre
- Bump JUnit from 5.11.0 to 5.11.3
- Bump Jackson from 2.17.2 to 2.18.1
- Bump HttpClient from 5.4 to 5.4.1
Новости
- Статья Чего вы не знали о Selenide от Serhii Bryt
- Обзор Selenide 7.5.1 от Borys Yevstyhneiev
- Пишем тесты с Selenide - Демо-занятие курса «Java QA Engineer. Professional»
- Сравниваем Selenium и Selenide: что выбрать? от Inzhenerka.tech
- Как написать автотест за 10 минут на Selenide? от Дмитрий Ярыгин
- Погружение в Selenide
- UI Testing with Selenide в блоге Oril, см. Видео туториал
- новенький адаптер для Selenide, см. проект на гитхабе
- Selenide — практикум
- Selenide. Знакомство и написание тестов
- Selenide-Java от Victor Hugo Fonseca
Статистика
Количество скачиваний побило новый рекорд - 1.3 миллиона за октябрь!

ru.selenide.org
24.11.24
