Вышла Selenide 7.9.3

Вышла Selenide 7.9.3

Абсолютно сумасшедший
27.05.25

Даров!

Пока не началось лето, вы успеваете ещё обновиться на Selenide 7.9.3.


Обновили Selenium с 4.32.0 на 4.33.0

И подняли версию CDP с v136 до v137. С ума сойти, как это круто!

См. PR 3034


Клик с нажатыми левыми клавишами

Недавно мы запилили клик через JS с нажатой кнопкой ALT, CTRL, SHIFT или META.

Но мы забыли про клавиши LEFT_ALT, LEFT_CONTROL, LEFT_SHIFT. С ума сойти, как мы это пропустили?

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

$("#btn").click(using(JS)
  .holdingKeys(LEFT_CONTROL, LEFT_SHIFT, LEFT_ALT));

А клавиши LEFT_META не существует, потому что META признана… ультраправой террористической, ну вы в курсе.

См. issue 2763 и PR 3030.


Исправили баг с фокусом в $.setValue

Как вы знаете, метод $.setValue() может работать либо через sendKeys, либо через JavaScript. Последний способ может ускорить ваши тесты.

Но вот какой фокус оказался с фокусом. :)

Фокус

Когда вы на каком-то элементе <input> вызываете $.setValue(JS), то селенид делает следующие шаги:

  1. Убрать фокус из предыдущего активного элемента
  2. Поставить фокус в наш искомый элемент <input>
  3. Вбить значение

Проблема

И если наш искомый элемент и так уже в фокусе, то шаги 1 и 2 убирали и снова ставили фокус в один и тот же элемент. И всё бы ничего, но бывают такие элементы, которые при потере фокуса… пропадают. И они после первого шага пропадали. И второй шаг уже падал с ошибкой. С ума сойти, как такое вообще можно отдебажить?

Решение

В общем, теперь $.setValue(JS) будет чуточку умнее и не будет играться с фокусом, если фокус и так уже на искомом элементе.

См. PR 3035.


Исправили ленивую инициализацию пэдж обжектов

Может, вы не знали, но пэдж обжекты в селениде - ленивые. То есть вы можете создать инстанс пэдж обжекта ДО того, как открыт браузер, и никакие веб-элементе нигде искаться не будут (до тех, когда вы попытаетесь их использовать).

Выяснилась проблемка: если в пэдж обжекте есть поле типа List<WebElement> (и браузер ещё не открыт), то он при создании валится с ошибкой, что мол, браузер ещё не открыт. С ума сойти, почему до сих пор никто на это не пожаловался?

Теперь пэдж обжекты с полями List<WebElement> тоже будут ленивыми.

Мы советуем объявлять поля пэдж обжектов с типом ElementsCollection вместо List<WebElement>.

См. PR 3036.


Исправили проверку “texts in any order” в режиме FULL_TEXT

В Селениде есть настройка FULL_TEXT, которую вам всем стоило бы включить. :) Но парочка проверок не учитывали эту настройку…

В Selenide 7.9.1 мы исправили метод texts, но забыли про textsInAnyOrder.

Теперь и textsInAnyOrder будет правильно работать с включённой настройкой FULL_TEXT:

  Configuration.textCheck = FULL_TEXT;
  $$(".element").shouldHave(texts("бутафорская", "", "делегация"));
  $$(".element").shouldHave(textsInAnyOrder("делегация", "", "бутафорская"));

См. PR 3037.

NB! Рекомендуем прописать настройку

Configuration.textCheck = FULL_TEXT;

В Selenide 8.0.0 она будет включена по умолчанию.


Чего многие разработчики не понимают, так это того, что если бы не тесты, с их проектами уже произошло бы много очень плохих вещей, и я имею в виду — ОЧЕНЬ ПЛОХИХ.

Не играйте с огнём, пишите тесты.


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

ru.selenide.org

27.05.25