Даров!
Пока не началось лето, вы успеваете ещё обновиться на Selenide 7.9.3.
- Обновили Selenium с 4.32.0 на 4.33.0
- Клик с нажатыми левыми клавишами
- Исправили баг с фокусом в
$.setValue
- Исправили ленивую инициализацию пэдж обжектов
- Исправили проверку “texts in any order” в режиме
FULL_TEXT
Обновили 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)
, то селенид делает следующие шаги:
- Убрать фокус из предыдущего активного элемента
- Поставить фокус в наш искомый элемент
<input>
- Вбить значение
Проблема
И если наш искомый элемент и так уже в фокусе, то шаги 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