С днём рождения!
Да-да, в этот день 12 лет назад был сделан первый коммит в проекте Selenide. Если интересно, здесь видос моего рассказа к 10-летию селенида.
К празднику мы выпустили мажорный релиз Selenide 7.0.0 с обновлением аж сразу на Java 17.
Condition
CollectionCondition
ElementsCollection
FileNotFoundException
на FileNotDownloadedError
*Exception
в *Error
WebDriverEventListener
$.getSelectedValue()
и $.getSelectedText()
@Report
и @GlobalTextReport
Чума! Этот день настал!
Чтобы использовать Selenide 7.+, вам придётся компилировать и запускать тесты на Java 17+.
Как же это круто, да?
Я знаю, среди вас найдутся те, кому это решение не понравится. Вы всё ещё вынуждены гонять тесты на Java 8.
Но мы не виноваты. Как вы знаете, Selenium 4.14+ перешёл с Java 8 на Java 11. Так что продолжать жить с Java 8 у вас всё равно не получилось бы. Обновиться на Java 11 всё равно пришлось бы. Ну а дальше простое соображение: самое сложное обновление как раз с Java 8 на Java 11. А вот с Java 11 на Java 17 обновиться намного проще. Там и делать-то ничего не надо.
Так что обновляйтесь смелее!
Жить слишком коротка, чтобы продолжать мять титьки с Java 8
См. PR 2522.
Это старая болячка в Selenide: класс Condition
и любой из его дочерних классов зависели друг от друга. Поэтому при определённых обстоятельствах мог случиться дедлок при одновременной загрузке этих классов. Крайне редко, но теоретически возможно.
Подробнее про static initialization deadlock можно посмотреть в видосе Перформансные войны.
При этом нам пришлось переименовать базовый класс для всех проверок из Condition
в WebElementCondition
.
Condition.visible
останутся без изменений.extends Condition
на extends WebElementCondition
.См. issue 2372 и PR 2453.
Тут идёт речь не о классических проверках веб-элементов, а о проверках “нового поколения”: url, localStorage и т.п.
webdriver().shouldHave(url("https://some.com/page.html"));
localStorage().shouldHave(item("mouse", "Jerry”));
sessionStorage().shouldHave(itemWithValue("mouse", "Jerry”));
clipboard().shouldHave(content("Лох, Антилохово, Шалава, Мусорка, Пуково, Попки и Бухалово"));
В общем, мы сделали сообщение об ошибке более корректным. За деталями можно сгонять в issue 2500 и PR 2501.
Condition
Удалили методы apply()
и actualValue()
в классе Condition
. Они уже давно были помечены как @Deprecated
.
Вас это коснётся, только если вы писали свои самодельные проверки. Теперь вместо двух методов apply()
и actualValue()
вам нужно будет реализовывать лишь один метод check
.
См. PR 2512.
CollectionCondition
Аналогично предыдущему пункту, если у вас есть самодельные проверки для коллекций (extends CollectionCondition
), то в них вместо методов test
и fail
надо будет реализовать один метод check
.
См. PR 2520.
ElementsCollection
Боюсь, тут будет много чего подгорать. :) В общем, теперь ElementsCollection
больше не наследует java.util.List
. Изначально это наследование случайно привнесло в ElementsCollection
кучу ненужных методов (таких, как remove()
, removeRange
, clear
, subList
или listIterator()
), которые никогда не планировалось реализовывать. Но пользователи иногда использовали. И даже иногда жаловались на хабре, что они не так работают.
Ну вот, теперь нет методов - нет проблем.
В $$
остались только те методы, которые мы считаем нужными. Аминь.
См. PR 2513.
FileNotFoundException
на FileNotDownloadedError
Раньше многие методы типа $.download()
были объявлены как throws FileNotFoundException
. И вам приходилось страдать, добавляя этот бессмысленный throws FileNotFoundException
и в свои тесты. Теперь можно будет подчистить этот хлам и убрать ненужные catch (FileNotFoundException)
, если они у вас были.
Теперь методы типа $.download()
будут кидать FileNotDownloadedError
, который является AssertionError
, и его не надо ни объявлять, ни ловить. Если тест не смог скачать файл - тест должен упасть. Никакой дополнительной обработки не требуется.
См. PR 2526.
*Exception
классы в *Error
Лично я не думаю, что это хоть сколько-нибудь важно.
Но религия некоторых пользователей запрещает им называть класс *Exception
, если он не наследует класс java.lang.Exception
.
Ну что ж, вы уважаем все религии. Теперь селенидовские классы, наследующие java.lang.Error
, будут называться *Error
.
В Украине. Блогерка. Молдова. Беларусь. Таллинн.
Нам несложно.
См. issue 2485 и PR 2530.
WebDriverEventListener
Мы удалили все методы типа addListener()
с параметром типа org.openqa.selenium.support.events.WebDriverEventListener
.
Этот класс уже давно был помечен как @Deprecated
в селениуме.
Используйте вместо него addListener()
с параметром org.openqa.selenium.support.events.WebDriverListener
.
См. PR 2516.
Очередная чистка. Просто замените
$("#what").dragAndDropTo(where);
на
$("#what").dragAndDrop(to(where));
См. PR 2519.
$.getSelectedValue()
и $.getSelectedText()
И ещё чистка.
$.getSelectedValue()
на $.getSelectedOptionValue()
$.getSelectedText()
на $.getSelectedOptionText()
См. PR 2521.
@Report
и @GlobalTextReport
Эти аннотации были не нужны, начиная с Selenide 6.7.0. Просто удалите их. Да и TestNG удалите, чего уж там. ;)
См. PR 2517.
new BearerTokenCredentials("pwd")
на
new BearerTokenCredentials("domain", "pwd")
$.should(appears);
на
$.should(appear); // или просто $.shouldBe(visible)
Selenide.open(url, BASIC, "username", "password");
на
Selenide.open(url, BASIC, new BasicAuthCredentials("username", "password"));
См. PR 2518.
Навстречу прогрессу!
25.10.23