Вышла Selenide 6.5.0

Вышла Selenide 6.5.0

ремастеринг setValue


Здравствуйте, друзья!


Мы выпустили релиз 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.


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

Кстати, проект 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