Привет!
У нас случился толстенький релиз 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.
Обновили зависимости
- JUnit from 5.8.2 to 5.9.0
- WebDriverManager from 5.2.1 to 5.2.3
- Netty from 4.1.78.Final to 4.1.79.Final
- BrowserUpProxy from 2.2.0 to 2.2.1
- LittleProxy from 2.0.9 to 2.0.10
- ByteBuddy from 1.12.12 to 1.12.13
UPD Selenide 6.7.1
- вернули параметр
Driver
в методSelenidePageFactory.findSelector()
- он используется вselenide-appium
.
Новости
- Opinionated reporting framework for Selenide от Ulrich Mayring
- Новая версия Пацан накодил - пацан протестил - Career Day, Минск, 04.06.2022
- Extending open-source libraries: Selenide & Selenium - Selenium Conf, 30.07.2022
- Автоматизація з Selenide, ввідне заняття by Роман Маринский
- Flaky Tests - devclub.ee, Tallinn, 05.07.2022
- Оффтопик: моё выступление на типа открытом микрофоне про поездки на конференции в Киев - “Твой выход”, 23.07.2022, Таллинн
ru.selenide.org
04.08.22