День рождения!
Ура! Сложно поверить, но сегодня Селениду исполняется… 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.
Теперь же мы решили упростить вам задачу (особенно с прокси).
- Для пользователей Selenide и JUnit5 ничего не меняется:
testImplementation("com.codeborne:selenide:6.0.1)
- Пользователи JUnit4 должны будут использовать
testImplementation("com.codeborne:selenide-junit4:6.0.1)
- Пользователи TestNG должны будут использовать
testImplementation("com.codeborne:selenide-testng:6.0.1)
- Если вы хотите использовать прокси, достаточно добавить в проект зависимость
testImplementation("com.codeborne:selenide-proxy:6.0.1)
- и можно больше не заморачиваться с версиями BrowserUpProxy, Netty и т.п. - Ну и если среди вас есть радикальные ненавистники статических методов, теперь и вы сможете быть счастливы, используя
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
- What’s New In Selenium 4? by Applitools
- Selenium 4: Understanding Key Features by BrowserStack
- A comprehensive guide to Selenium 4 by SauceLabs
- What Is New In Selenium 4 And What Is Deprecated In It? by LambdaTest
- Обновлённый сайт Selenium
Другие новости
- внезапный выпуск Heisenbug Show, посвящённый 10-летию Селенида.
- Первый TestOps Hackathon от PropellerAds и Qameta Software - с 12 по 16 ноября. Регистрируйтесь!
- Ребята из Aerokube выпустили альтернативный клиент WebDriver. Теоретически теперь селенид может работать на нём вместо Selenium Webdriver. Звучит заманчиво?
- Koncerns: Почему я не тороплюсь на Котлин
- Я пока не разбирался, но люди вроде хвалят: какие-то образы Docker для Selenium
Статистика использования Селенида
Перевалили за 255 тысяч скачиваний в месяц.
Что нас ждёт впереди?
ru.selenide.org
25.10.21