Мы зарелизили Selenide 6.2.0.
Давайте посмотрим, что нам приготовил первый релиз в новом году.
Наливайте чай и погнали!
Как вы помните, в Selenide 5.25.0 мы добавили поддержку OpenTest4J, в результате чего у селенидовских ошибок в IDE появилась ссылочка “<Click to see difference>”, позволяющая удобно посмотреть различия между ожидаемым и актуальным значением.
Но тогда мы всё порефакторить не успели, и ссылочка появилась не у всех типов ошибок.
А теперь должна появиться у всех.
См. issue 1589 и PR 1676.
$$.iterator() на $$.asDynamicIterable() и $$.asFixedIterable()Ух какую старую болячку мы исправили! Ну молодцы же!
Есть в селениде метод $$ для коллекции элементов. Возвращает он объект класса ElementsCollection.
Изначально у него должен был быть только один метод $$.shouldHave(<условие>). Хочешь проверить коллекцию элементов на соответствие какому-то условию - передай нужное условие. Не нашёл готового условия - напиши своё, благо это легко.
Но в те давние времена случилось так, что я наследовал класс ElementsCollection от AbstractList<SelenideElement>. Об этом решении я неоднократно жалел впоследствии.
Что же случилось, спросите вы? А случилось то, что люди начали абьюзить коллекции как не в себя.
AbstractList).$$("div").filter(visible).filterBy(text("Hello")).Получилась дилемма:
StaleElementException, когда элементы на странице исчезают и появляются;Какой вариант ни выберешь - всем не угодишь.
И наконец мы придумали, как решить эту дилемму. Случайно унаследованные от AbstractList методы типа $$.iterator() мы пометили как @Deprecated. Вместо них предлагаем вам два метода, из которых вы сами сможете выбрать согласно вашим потребностям:
$$.asDynamicIterable() - перегружает элементы коллекции при итерировании. Может быть медленным на больших коллекциях.$$.asFixedIterable() - не перегружает элементы при итерировании. Он быстрее, но не получает обновлений, если элементы удаляются или добавляются во время итерирования.Какой из них я вам советую?
НИКАКОЙ! :)
Напоминаю, что в хорошем тесте, скорее всего, не должно быть циклов, условий и т.п.
Вы должны точно знать, сколько элементов ожидается на странице, и какие свойства должны быть у каждого из них! Просто проверьте эти свойства.
Вместо итерирования всегда лучше написать свой CollectionCondition. Благо это легко.
в довольно редкой ситуации:
Вообще в такой ситуации надо исправлять сам тест. :(
И всё же. До сих пор селенидовский софт ассерт валил тест, потому что в ходе теста была ошибка, и листенер это заметил. А теперь листенер стал чуть умнее и тест не валит.
Уф, ну и проблемки вы иногда подкидываете, дорогие пользователи… :)
См. issue 1646 и PR 1680.
Ещё одна редкая проблема с софт ассертами. Представьте ситуацию:
NPE или assertEquals(2, 3)).В этом случае селенидовский софт ассерт листенер валил тест (что правильно), но показывал только селенидовские ошибки (п. 2) и терял “другую” ошибку (п.3).
Теперь листенер стал умнее, и показывает все ошибки.
См. issue 1661 и PR 1679.
Мелочь, но стоит упомянуть.
Мы добавили селектор к некоторым селенидовским ошибкам.
Например, там, где селенид раньше кидал такую ошибку:
“Invalid element state: Cannot change invisible element”
Теперь он будет кидать такую:
“Invalid element state [.btn.btn-primary]: Cannot change invisible element”
Важно отметить, что версия 2.1.3 - это форк оригинального BrowserUpProxy. Автор объявил о прекращении поддержки, добровольцы переняли инициативу и зарелизили версию 2.1.3 из форка.
Будем следить за ситуацией. В идеале хорошо бы перейти с BrowserUpProxy на mitmproxy. Есть добровольцы?
См. PR 1678.
Список изменений внушительный.
См. PR 1682.
С Новым Годом, друзья!
Стабильных тестов вам и красивых отчётиков!