Вышла Selenide 6.7.0

Вышла Selenide 6.7.0

Полные тексты, полные скриншоты
04.08.22


Привет!


У нас случился толстенький релиз Selenide 6.7.0

Теперь $.shouldHave(text) может проверять текст целиком

Испокон веков команда $.shouldHave(text) проверяла не текст целиком, а только подстроку:

  <div id="freedom-to">Britney Spears</div>
  $("#freedom-to").shouldHave(text("Brit"));  // was OK

Когда-то это показалось удачной идеей, потому что веб-страничка часто содержит всякие левые символы (переводы строк, символы табуляции, непереносимые пробелы, множественные пробелы и т.п.).

Но похоже, это всё-таки была неудачная идея, т.к. новички по умолчанию предполагают, что текст проверяется целиком, и выхватывают свою порцию WTF, когда обнаруживают, что все их проверки проверяли немного не то. :)

А левые символы селенид научился правильно игнорировать (например, несколько пробелов/табов/переводов подряд эквивалентны одному пробелу).

NB! Поскольку это изменение слишком уж кардинальное и наверняка сломает кучу ваших тестов, мы пока оставили по умолчанию старое поведение. А новое можно включить такой настройкой:

  Configuration.textCheck = FULL_TEXT;

А когда вам нужно проверить именно подстроку, можете использовать новую проверку partialText:

  $("#freedom-to").shouldHave(partialText("ey Spear"))

Возможно, мы включим этот режим по умолчанию в следующей мажорной версии Selenide 7.0.0 - а до тех пор вы можете поиграться и дать нам обратную связь.

См. issue 1780 и PR 1783.


Научили Селенид делать большие скриншоты

Ну наконец-то!

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

Теперь вы можете одной строчкой подключить плагин, который снимает скриншот с полным содержимым веб-странички:

testImplementation "com.codeborne:selenide-full-screenshot:6.7.0"

P.S. Фича работает только для браузеров, поддерживающих CDP (Chrome, Edge и т.д.) и Firefox. Для остальных будут по-прежнему обычные скриншоты.

См. issue 1799 и PR 1858. Спасибо Aliaksandr Rasolka за PR 1800.


Добавили кэширование элементов в пэдж обжектах

Как вы знаете, селенид поддерживает обычные селениумовские пэдж-обжекты с аннотациями @FindBy. Но вот аннотацию @CacheLookup селенид до сих пор не поддерживал - нам это казалось ненужной оптимизацией, ведь в тестах большая часть времени теряется вовсе не на поиск элементов.

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

Спасибо Ilya Koshaleu за PR 1894.

P.S. Встаёт вопрос, а не надо ли добавить кэширование и для обычных $ и $$. А как это оформить - параметром, настройкой? Новым методом?

Предлагайте ваши идеи!


Отменили аннотацию @Report

Вот культура отмены добралась и до аннотаций!

Это изменение касается любителей TestNG, которые использовали селенидовский отчёт. Для этого им надо было повесить на тесты две аннотации:

  @Listeners({TextReport.class})
  @Report
  class MyTest {...}

Почему так сделали - это долгая история про корявые принципы работы листенеров в TestNG (вкратце: добавление аннотации листенера одному классу внезапно влияет на все остальные классы). Но теперь мы поняли, что систему можно упростить: аннотация @Report больше не нужна.

А отчёт будет генерироваться для всех тестов, помеченных аннотацией @Listeners({TextReport.class} и их потомков.

См. issue 1891 и PR 1909.


Декодируем имя скачанного файла

Оказалось, что при скачивании файла имя файла в ответе сервера иногда бывает закодировано в Base64. А селенид считывал имя файла как есть. Теперь вот умеет расшифровывать и Base64.

См. issue 1886 и PR 1889.


Починили $.setValue() в IE

Оказалось, мы недавно сломали метод $.setValue() в Internet Explorer. Не то чтобы случайно: IE ведь официально отдал концы. Но жалобы были, и мы его вернули.

См. PR 1907.


Сделали публичным HttpClientTimeouts

Но лишний раз туда лучше не лазать.

См. PR 1902.


Вернули тип параметра String для $.setValue()

Лично у меня подгорает от того, что такая проблема вообще возникла.

Подробности в issue 1885 и PR 1888.


Добавили валидацию расширения файла

См. PR 1887.


Обновили зависимости


UPD Selenide 6.7.1

  • вернули параметр Driver в метод SelenidePageFactory.findSelector() - он используется в selenide-appium.


Новости


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

ru.selenide.org

04.08.22