Здравствуйте, друзья!
Мы выпустили релиз Selenide 6.5.0.
Теперь можно маскировать пароли в отчётах
Иногда в автотестах приходится вбивать в поля пароли и другие секретные данные. И некоторые люди переживают, что эти данные потом видны в отчётах (Allure или TextReport). И просят их как-нибудь скрыть.
Лично я не понимаю, почему кого-то должен волновать пароль от тестовой среды. (Вы же не используете одни и те же пароли во всех средах? Вы же не гоняете тесты на продакшине?)
Но мы пошли навстречу пожеланиям переживающих, и теперь вы можете маскировать или заменять секретные данные:
$("#password").setValue(withText("admin").sensitive());
// заменяет на звёздочки
$("#username").setValue(withText("john").withDisplayedText("J* username"));
// заменяет на "J* username"
См. issue 1768 и PR 1770.
Теперь можно легко выбрать дату в <input type=date>
Оказалось, что выбрать дату в селениуме не так-то просто.
Если в вашем приложении есть элемент вида <input type=date>
, то при клике в него разные браузеры
открывают разные календарики, и при этом используют разные форматы даты. По идее они должны использовать
формат из настроек пользователя, но на деле каждый браузер играет в свою игру.
Всё это приводят к флейки тестам, которые могут работать на одном компьютере, но внезапно упасть на другом.
В результате моего исследования я пришёл к выводу, что единственный надёжный способ выбрать дату - это установить
значение в фиксированном формате yyyy-mm-dd
через JavaScript. Похоже, это работает одинаково во всех ОС и браузерах.
И теперь Селенид предоставляет такую возможность с помощью нового метода withDate
:
LocalDate birthday = LocalDate.parse("1979-12-31");
$("#birthday").setValue(withDate(birthday));
См. issue 1753 и PR 1770.
Теперь метод $.setValue("")
поддерживает React, Vue.js и т.п.
Давно замечено, что стандартный селениумовский метод WebElement.clean()
(в частности, использующийся в селенидовском
$.setValue()
) не всегда правильно работает, когда имеют дело не с обычным <input>
, а с обёрнутыми/обвязанными
модными конструкциями, генерируемыми всякими современными JS-фреймворками типа React, Vue.js и прочей хипстоты.
По идее мы это починили, ждём ваших отзывов.
Теперь следующие методы реализованы не через стандартный селениумовский WebElement.clear()
, а через
нажатия комбинации клавиш:
1. Method $.clear()
:
input.sendKeys(HOME, chord(SHIFT, END), BACK_SPACE);
2. Method $.setValue("")
:
input.sendKeys(HOME, chord(SHIFT, END), BACK_SPACE, TAB);
Такой способ, похоже, работает во всех ОС и браузерах.
См. issue 1497 и PR 1787.
Спасибо Alexei Vinogradov за исследование проблемы в PR 1499.
Убрали двойное событие blur
и change
Из предыдущего изменения автоматически следует, что метод $.setValue("blah")
вызывает события blur
и change
только единожды.
А раньше метод $.setValue("blah")
работал в два шага и вызывал их дважды:
- Шаг 1.
$.clear()
// вызывалоblur
иchange
- Шаг 2.
$.sendKeys("blah")
// ещё раз вызывалоblur
иchange
И события на первом шаге иногда приводили к неожиданным эффектам - например, исчезанию самого поля.
См. issue 960.
Вызываем событие blur
на предыдущем элементе
В предыдущем пулреквесте заодно сделали так, что метод $.setValue("blah")
вызывает событие blur
на предыдущем
активном элементе. Как минимум это помогло исправить некоторые наши флейки тесты. Надеемся, поможет и вам.
См. issue 1784 и commit 593e6fc9005.
Теперь методы $.setValue()
и $.append()
проверяют, что элемент не выключен
Точнее, что элемент не находится в состоянии “disabled” или “readonly”.
См. issue 1523 и PR 1787.
Добавили новые проверки “interactable” и “editable”
Эти проверки уже существовали и использовались раньше внутри Селенида, но не торчали наружу. А теперь и вы сможете их использовать:
$("input[type=file]").shouldBe(interactable);
// interactable = visible OR "opacity: 0"
$("input").shouldBe(editable);
// editable = interactable AND enabled AND !readonly
См. issue 1523 и PR 1787.
Метод $.download(FOLDER)
дожидается полной загрузки файла
Британские учёные обнаружили, что иногда флейки тесты вызваны тем, что файл скачивается довольно медленно, и селенид
успевает обнаружить и скопировать к себе файл, который уже появился в C:\Downloads
,
но ещё не полностью загружен.
Теперь селенид ждёт, пока в C:\Downloads
исчезнут все файлы “.crdownload” (для хрома) и “.part” (для фаерфокса).
Это временный файл, создаваемый браузером на короткий период, пока скачивается файл.
См. issue 1779, PR 1804 и PR 1769.
Добавили метод stream()
для коллекций
Точнее, метод $$.stream()
существовал и раньше, но в версии 6.2.0 был помечен как deprecated.
Теперь вместо него есть на выбор два не-deprecated метода:
$$.asFixedIterable().stream()
$$.asDynamicIterable().stream()
См. issue 1773 и PR 1774.
Удалили встроенную селениумовскую телеметрию (OpenTelemetry)
Я так понимаю, эта телеметрия появилась в Selenium 4. Не знаю, зачем она вообще нужна, но кому-то мешала (потому, что у него уже была какая-то своя телеметрия). Ну и нам было проще её удалить, чем поддерживать обе.
Спасибо Petro Ovcharenko и Aliaksandr Rasolka за PR 1763.
Обновили зависимости
- Selenium 4.1.3 -> 4.1.4.
- WebDriverManager 5.1.0 -> 5.1.1
- Netty 4.1.75.Final -> 4.1.76.Final
- Netty 4.1.76.Final -> 4.1.77.Final
- LittleProxy 2.0.7 -> 2.0.9
Кстати, проект LittleProxy переехал в отдельную организацию на гитхабе, и теперь я его главный мейнтейнер. Не то, чтобы я был фанатом проксей, но он используется в селениде, и поддерживать его как-то надо…
UPD Selenide 6.5.1
Небольшое обновление Selenide 6.5.1:
- #1808 Починили
$.clear()
, чтобы он не жмякал таб - см. PR #1809 - #1806 Обновились с browserup-proxy-core 2.1.4 на 2.1.5
UPD Selenide 6.5.2
#1497 Починили $.clear()
на свежем фаерфоксе: теперь жмякаем “Ctrl+A -> Delete” вместо “Home -> Shift+A -> Delete”.
См. PR #1838.
Новости
Отдельный привет всем, кто ждал, что же тут будет в конце пресс-релиза. ;)
А будет моя презентация с последнего фестиваля TechTrain.
Видео с TechTrain будет через несколько месяцев, а пока можете посмотреть похожее видео из девклуба. Оно немного другое, ибо ориентировано на другую аудиторию, но общее представление получить можно.
Не переключайтесь!
ru.selenide.org
17.05.22