Вышла Selenide 5.25.0

Нам скоро 10!

Блог

Вышла Selenide 5.25.0

Нам скоро 10!

Добрый вечер!

Мы зарелизили Selenide 5.25.0.

Очень советую обновиться,
потому что за этим релизом грядут ещё большие изменения, включая полноценный релиз Selenium 4.
Если не обновитесь сейчас, потом будет намного сложнее разгребать завалы!

Это прямо большой релиз с кучей изменений, так что запаситесь попкорном и заварите чаю. Погнали!


Поддержка Selenium Webdriver 4.0.0 RC1

Мы выпустили две сборки Selenide 5.25.0: обычную и хипстерскую.
Можете сами выбрать:

либо com.codeborne:selenide:5.25.0' Selenium 3.x),
либо com.codeborne:selenide:5.25.0-selenium-4.0.0-rc-1 Selenium 4.0.0 RC1).


Добавили поддержку OpenTest4j

Если вы ещё не слышали, OpenTest4j - это маленькая библиотека для assertion errors, созданная по инициативе ребят из JUnit 5. Идея в том, чтобы все тестовые фреймворки кидали именно эти ошибки, а все IDE их поддерживали. Её уже давно поддерживают крупные игроки типа JUnit, TestNG, AssertJ, IDEA и Eclipse, а вот теперь ещё и Selenide.

Что изменится лично для вас:
Когда ваш UI тест падает (ну, почти всегда), IDEA теперь красивенько показывает внизу ссылочку <Click to see difference>. Вы можете её кликнуть и увидеть красивый идеевский DIFF в отдельном диалоге. Очень удобно при отладке.

См. issue 969 и PR 1545.

NB! Если вы в своих проектах использовать напрямую селенидовские классы ошибок (наследовали или кидали), то придётся чуть подпилить код, потому что мы чутка изменили сигнатуры их конструкторов:

  • поменяли местами аргументы “expected” и “actual”
  • убрали ненужный параметр “driver” из большинства конструкторов



Показываем стектрейс под каждой ошибкой в SoftAsserts

До сих пор селенидовские софт ассерты показывали только один общий стектрейс после всех ошибок. А удобнее видеть стектрейс под каждой, тогда легко кликнуть на нужную строчку и попасть сразу в нужное место в коде.

Теперь стектрейс будет под каждой ошибкой. Правда, теперь общее сообщение об ошибке стало гораздо длиннее, но ведь их не должно быть часто и много, правда? ;)

См. issue 1543 и PR 1545


Добавили метод $.shadowRoot()

Раньше можно было только искать элементы внутри shadow root, а теперь можно получить и сам shadow root. Правда, пользы от этого пока немного, т.к. поиск внутри этого элемента не поддерживается (браузерами или вебдрайверами, я уж не знаю - запутался).

См. issue 1515 и PR 1517.


Добавили метод $.ancestor()

По сути это просто синоним к существующему методу $.closest(). Но только название closest было родом из JQuery (олды помнят!), а ancestor должно быть более понятным, т.к. это общеизвестный термин из XPath.

См. issue 1556.
Спасибо Oleg Berezhnoy за PR 1567


Обогатили методы $.closest() и $.ancestor()

Раньше этот метод умел искать элемент только по тэгу или классу:

  • $.ancestor("table").shouldBe(visible)
  • $.ancestor(".form").shouldBe(visible)

То теперь добавился поиск по атрибуту:

  • $.ancestor("[argument-name]");
  • $.ancestor("[argument-name=argument-value]");

Спасибо Vitali Plagov за PR 1554


Починили метод $.screenshot() на маках

В селениде уже давно есть метод $.screenshot(), который позволяет сделать снимок не всего экрана, а только указанного элемента. Оказалось, что этот метод неправильно работал на MacBook: вырезал не ту область экрана (из-за всей этой чехарды с пикселями на дисплее Retina).

К счастью, мы обнаружили, что соответствующий функционал уже давно реализован в селениуме, поэтому мы вырезали костыльный код из селенида и использовали стандартный метод вебдрайвера. Работает как минимум на Chrome, Firefox, Edge.

См. issue 1571 и PR 1576.


При падении текстовых проверок селенид выдаёт точное значение на момент падения

Ничего себе, какие старые болячки мы иногда чиним! Этот тикет был зарегистрирован аж 6 сентября 2015!

В общем, история такая.

Допустим, в вашем тесте есть проверка

$.shouldHave(text("Hello"));

И стандартный таймаут в 4 секунды. И вот:

  1. в течение 4 секунд селенид проверяет-проверяет текст, а он всё не тот и не тот (допустим, “Goodbye”).
  2. таймаут истекает,
  3. селенид решает кинуть ошибку,
  4. начинает составлять сообщение и добавляет к нему текущий текст элемента - а он как раз в этот момент взял и да поменялся! Допустим, на “Hello”.

Такое случается очень редко, но когда случается, может вызвать недопонимание. Вы видите ошибку:

Текст не совпал. Ожидался: Hello, а был: Hello.

и чувствуете, как мозг начинает подгорать…

Теперь Селенид запоминает именно тот текст, который был на момент проверки, и именно его добавляет в сообщение об ошибке. Да здравствуют неподгоревшие мозги!

P.S. В будущем мы планируем этот механизм ещё больше усовершенствовать, и выводить всю историю изменений текста в течение этих несчастных 4 секунд. Больше отчётов богу отчётов!

См. issue 217 и PR 1566.
Спасибо Pavel Fokin за PR 1313.


Запретили пустой аргумент в методе $.matchText("")

В селениде есть метод для проверки текста элемента регулярным выражением:

$("#child_div1").should(matchText("Таллин{1,2}")));

И тут мы обнаружили, что метод matchText позволяет передать ему пустую строку, что можем привести к ложно-зелёным тестам. Теперь же при попытке вызвать $.should(matchText(""))) вы сразу увидите такую ошибку:

java.lang.IllegalArgumentException: Argument must not be null or empty string

См. PR 1566


Добавили проверку webdriver().shouldHave(title(...))

Как обычно, есть варианты со стандартным таймаутом и кастомным:

webdriver().shouldHave(title("Login page"));
webdriver().shouldHave(title("Login page"), ofMillis(10));

См. issue 1573.
Спасибо Ervīns Patmalnieks за PR 1579.


selenide-selenoid 1.2.0

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


selenide-appium 1.7.0

Мы выпустили selenide-appium:1.7.0 с обновлением на Selenide 5.25.0



Ссылки


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


Знаковый рубеж пройден: перевалили за 250 тысяч скачиваний в месяц.


Юбилей

Кстати, мы вплотную подошли к ещё одному знаковому рубежу: в октябре Селениду исполняется… 10 лет!
В это сложно поверить, но первый коммит в репозитории был сделан аж 25 октября 2011 года. Вы только посмотрите, какой он был нелепый! :)


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

ru.selenide.org

The project is maintained by