Вышла Selenide 6.0.1

Вышла Selenide 6.0.1

Нам 10 лет!
25.10.21


День рождения!

Ура! Сложно поверить, но сегодня Селениду исполняется… 10 лет!
Именно в этот день 10 лет назад был сделан первый коммит в репозитории.

Огромное спасибо всем, кто участвовал в проекте, коммитил, репортил баги, предлагал идеи, отвечал на вопросы в форумах, критиковал и рассказывал про селенид на конференциях и митапах. Да и просто решился использовать селенид в своих проектах. Вы все - часть этого движения.


Ну а мы в честь юбилея зарелизили мажорную версию Selenide 6.0.1.


Обновились на Selenium Webdriver 4.0.0

Если вы не используете Grid, то для вас особо ничего и не должно поменяться. Всё более-менее работает как раньше. Ну там, переименовали или задеприкейтили некоторые классы, вроде нестрашно.

В Selenium 4 появились и новые возможности (такие как CDP и Relative locators), но какой-то отдельной поддержки для них в селениде мы пока не делали. Если понадобится, будем делать в следующих версиях.

См. issue 1162, PR 1605, PR 1614 и PR 1617.


Разбили Selenide на несколько артефактов

Раньше весь код селенида поставлялся одним джарником: selenide-5.25.0.jar.
Предполагалось, что дополнительно к нему вы должны были сами добавить и другие зависимости: JUnit или TestNG, и возможно, BrowserMobProxy.

Теперь же мы решили упростить вам задачу (особенно с прокси).

  1. Для пользователей Selenide и JUnit5 ничего не меняется:
    testImplementation("com.codeborne:selenide:6.0.1)
  2. Пользователи JUnit4 должны будут использовать
    testImplementation("com.codeborne:selenide-junit4:6.0.1)
  3. Пользователи TestNG должны будут использовать
    testImplementation("com.codeborne:selenide-testng:6.0.1)
  4. Если вы хотите использовать прокси, достаточно добавить в проект зависимость
    testImplementation("com.codeborne:selenide-proxy:6.0.1) - и можно больше не заморачиваться с версиями BrowserUpProxy, Netty и т.п.
  5. Ну и если среди вас есть радикальные ненавистники статических методов, теперь и вы сможете быть счастливы, используя
    testImplementation("com.codeborne:selenide-core:6.0.1) - и тогда у вас в проекте не будет статических методов Selenide.*, а только чистый SelenideDriver.

См. PR 1612.


Подчистили кучу deprecated методов

По этой ссылке всегда можете найти, что именно удалили и чем это заменить.
В частности,

  • ElementsCollection.shouldHaveSize() -> ElementsCollection.shouldHave(size())
  • $.waitUntil(_, timeout) -> $.should(_, Duration.ofMillis(timeout))
  • $.waitWhile(_, timeout) -> $.shouldNot(_, Duration.ofMillis(timeout))
  • Condition.disappears -> Condition.hidden
  • Condition.matchesText -> Condition.matchText
  • Selenide.close -> Selenide.closeWebDriver() или Selenide.closeWindow()

Спасибо Boris Osipov за PR 1607 и PR 1609.


Удалили поддержку браузера “legacy_firefox”

Это был такой старый вебдрайвер, который работал только с Firefox 52 и старше. Полагаю, ему пора на покой.

См. PR 1610.


Удалили старые настройки

Configuration.startMaximized

Есть мнение, что это плохая практика, потому что размер окна браузера зависит от текущего окружения, что может привести к моргающим тестам. Рекомендуем использовать Configuration.browserSize (по умолчанию 1366x768).

Configuration.versatileSetValue

Скорее всего вы её и не использовали, ведь она давным-давно была false по умолчанию.
Для выбора значений в <select> и <input type=radio> можно использовать старый добрые методы $.selectOptionByValue() и $.selectRadio().

Спасибо Boris Osipov за PR 1619.


Починили метод Selenide.sleep(N)

Казалось бы, разве такой просто однострочный метод может быть сломан? А вот может. Оказывается, стандартный джавовый метод Thread.sleep(N) не обязательно спит именно N мс, он может проснуться и раньше. И это может привести к моргающим тестам, если ваш тест рассчитывал именно на определённую паузу. Век живи - век учись.

Теперь метод Selenide.sleep(N) гарантированно спит заданное количество миллисекунд.

См. реализацию.


Добавили метод для добавления и удаления WebDriverListener

Раньше в селениде можно было добавлять WebDriverEventListener, но этот класс был заменён на WebDriverListener в Selenium 4. Ну вот, пришлось поддерживать оба.


См. issue 1615 и PR 1616.


Поменяли сигнатуру метода Condition.apply

Если вы не писали свои Conditions, то вас это не касается.

А если успели наваять, то придётся их немножко дополнить.

Итак, раньше в классе Condition был метод apply, который возвращал boolean:

public boolean apply(Driver driver, WebElement element) 

Теперь его нужно переименовать в check, и возвращать он должен не просто boolean, а CheckResult:

public CheckResult check(Driver driver, WebElement element) 

А этот CheckResult содержит не только признак “проверка прошла / не прошла”, но и какое значение было у элемента в тот момент. Это позволить формировать более точное сообщение об ошибке в случае падения теста.

P.S. Впрочем, старый метод apply всё ещё остался как deprecated, поэтому какое-то время вы можете сидеть на старых кондишинах. Просто при падении теста строчка “Actual value: “ не будет добавляться к сообщению об ошибке. Но это и не всегда критично.

См. issue 217, PR 1586 и PR 1618.


selenide-selenoid 2.0.1

Мы выпустили selenide-selenoid:2.0.0 с обновлением на Selenide 6.0.1


selenide-appium

Кажется, пока что Appium не поддерживает Selenium 4, так что selenide-appium пока обновить не можем. Будет следить за ситуацией.


UPD Selenide 6.0.2

Обнаружилась проблемка с проектами на TestNG, по-быстрому выпустили хотфикс 6.0.2.

См. issue 1623


UPD Selenide 6.0.3

Оказалось, что Maven может подтягивать старый selenium-api-3*.jar, если он найден в дереве зависимостей (обычно у BrowserUpProxy или Allure).

Мне давно кажется, что тут Maven мог бы быть чуточку поумнее и выбирать всё-таки более свежую версию.
Но поскольку люди довольно часто наступают на эти грабли, мы решили запилить костыль в селениде.

См. костыль 1625


Что почитать про Selenium 4


Другие новости


Статистика использования Селенида


Перевалили за 255 тысяч скачиваний в месяц.

Что нас ждёт впереди?


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

ru.selenide.org

25.10.21