Всем привет!
Мы выпустили 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