Доброй ночи!
У меня к вам предложение, от которого лучше не отказываться.
Обновляйтесь на Selenide 6.16.0!
- Ускорили проверки коллекций
- Улучшили сообщение об ошибках в коллекциях
- Новые проверки для дат
date(...)
иdatetime(...)
- Новые методы для установки времени
- Полный стектрейс в софт ассертах
- BasicAuth в браузерах Chromium
- Несколько доменов в BasicAuth
- Исправили
$.doubleClick()
в Appium - Снимаем скриншот чуть раньше
- Обновили зависимости
- Новости
Ускорили проверки коллекций
Вот это крутизна!
Как вы знаете, одна из базовых возможностей в Селениде - это проверки коллекций. Одной строчкой можно проверить сразу кучу элементов:
$$("option").shouldHave(texts("Шмякино", "Шебекино", "Шелебякино", "Шлёпкино"))
Однако такая проверка занимает время, если коллекция достаточно большая.
Например, если на странице 1000 элементов <option>
, на моём компе она занимает почти 3 секунды.
Медленность обусловлена тем, что Селенид спрашивает у браузера
текст каждого элемента по отдельности. 1000 вызовов вебдрайвера, даже очень быстрых - это долго.
Пришло время ускорить эти проверки.
Теперь Селенид запрашивает тексты всех 1000 элементов за один вызов вебдрайвера с помощью JavaScript.
Теперь та проверка вместо 3 секунд занимает 200 мс.
В 15 раз быстрее.
Ну очуметь же!
P.S. Для Appium и других возможных вебдрайверов, которые не поддерживают JS, остаётся старый вариант (который запрашивает тексты по одному). Что поделать. Хотя бы не стало хуже.
См. PR 2362.
Улучшили сообщение об ошибках в коллекциях
В рамках предыдущей переделки проверок для коллекций мы чутка дополнили и сообщения об ошибках. Теперь Селенид точнее говорит, какой именно элемент коллекции не совпал.
Например, вот такая проверка:
$$(".direction").shouldHave(texts(
"На Ростов", "На Москву", "В полевые лагеря согласно плану"));
Раньше выдавала просто "Texts mismatch"
:
Texts mismatch
Actual: [На Ростов, На Москву, В Беларусь]
Expected: [На Ростов, На Москву, В полевые лагеря согласно плану]
А теперь первая строка содержит более точное указание, что именно не совпало:
Text #2 mismatch (expected: "В полевые лагеря согласно плану", actual: "В Беларусь")
См. PR 2362.
Новые проверки для дат date(...)
и datetime(...)
import static com.codeborne.selenide.conditions.datetime.DateConditionOptions.*;
LocalDate theDay = LocalDate.of(2023, 6, 23);
$("#funParty").shouldHave(date(theDay));
$("#funParty").shouldHave(date(theDay, "yyyy-MM-dd"));
$("#funParty").shouldHave(dateBetween(parse("2023-06-22"), parse("2023-06-24")));
$("#funParty").shouldHave(dateFormat("yyyy-MM-dd"));
См. issue 2268. Спасибо Maksim @Au6ojlut за PR 2281.
Новые методы для установки времени
В селениде уже был метод для установки даты (withDate
):
LocalDate theDay = LocalDate.of(2023, 6, 23);
$("#euphoriaDay").setValue(withDate(theDay));
// для <input type="date">
Теперь же мы добавили похожие методы для установки даты с временем (withDateTime
):
$("#epicFail").setValue(withDateTime(LocalDateTime.parse("2023-06-23 20:29")));
// для <input type="datetime-local">
либо только времени (withTime
):
$("#rostov").setValue(withTime(LocalTime.parse("07:00")));
$("#voronezh").setValue(withTime(LocalTime.parse("14:00")));
$("#lipetsk").setValue(withTime(LocalTime.parse("16:00")));
$("#moskva-reka").setValue(withTime(LocalTime.parse("20:20")));
// для <input type="time">
См. PR 2357.
Полный стектрейс в софт ассертах
В Селениде уже давно есть софт ассерты. Когда вы включаете этот режим, при падении нескольких проверок Селенид кидает ошибку не сразу, а лишь в конце теста. И в этой ошибке перечисляются все Assertion error.
Вопрос в том, что для этих ошибок Селенид показывал неполный стектрейс, и там не была видна часть “Caused by:”. Теперь будет видна. Будьте готовы к тому, что длина стектрейсов резко вырастет :).
См. issue 2350 и PR 2354.
Улучшили BasicAuth в браузерах семейства Chromium
В Селениде есть методы для авторизации на странице через BasicAuth:
open("/basic-auth/hello", "", "admin", "Казкова діброва");
До сих пор было две реализации BasicAuth.
- При включённом прокси: Селенид добавляет к запросу заголовок
Authorization
(Basic YWRtaW460JrQsNC30LrQvtCy0LAg0LTRltCx0YDQvtCy0LA=
). - При выключенном прокси: Селенид добавляет логин и пароль в URL (
https://admin:Казкова+діброва@localhost:42220/basic-auth/hello
).
Теперь к ним добавился третий вариант:
Если вебдрайвер реализует интерфейс org.openqa.selenium.HasAuthentication
, Селенид добавляет логин+пароль через него.
Фактически это означает браузеры семейства Chromium (Chrome, Chromium, Edge).
См. issue 2336 и PR 2358.
Несколько доменов в BasicAuth
До сих пор можно было прописать только один домен для BasicAuth:
open("/basic-auth/hello", "mister-cider.ru", "luka", "картофельный спас");
Это не помогает, если в тестируемом приложении задействовано несколько доменов - например, оно открывает фреймы с адресом
auth.mister-cider.ru
или там api.mister-cider.ru
. Всегда можно прописать пустую строку вместо домена, но у этого варианта есть
очевидные минусы.
Теперь можно прописать несколько доменов через запятую или “|”:
open("/basic-auth/hello", "mister-cider.ru|auth.mister-cider.ru|api.mister-cider.ru",
"luka", "картофельный спас");
См. PR 2358.
P.S. Естественно, имя домена не используется, когда Селенид добавляет логин+пароль просто в URL.
Исправили $.doubleClick()
в Appium
В предыдущем релизе мы сломали, а теперь починили двойной клик в мобильниках:
$(AppiumBy.xpath(".//android.widget.CheckBox")).doubleClick();
См. issue 2346 и PR 2347.
Снимаем скриншот чуть раньше
Обычно Селенид автоматически делает скриншот в случае падения теста.
НО
Если вы закрывали браузер в методе @AfterEach
, то Селенид уже не мог сделать скриншот:
@AfterEach
void tearDown() {
Selenide.closeWebDriver();
}
Теперь Селенид будет делать скриншот чуть раньше - ДО методов @AfterEach
.
См. issue 2352 и PR 2356.
Обновили зависимости
- 2319 use latest version of geckodriver for FF 102+
- 2328 bump Selenium from 4.9.1 to 4.10.0
- 2324 Bump io.appium:java-client from 8.5.0 to 8.5.1
- 2349 Bump Netty from 4.1.93.Final to 4.1.94.Final
- bump WebDriverManager from 5.3.3 to 5.4.0
Новости
- Пост Page Object – простой пример с использованием Selenide на IT-notes
- Видос Run Selenide Appium Test in LambdaTest в блоге “Testing Mini Bytes”
Ну что, нормальный результат, я считаю.
ВСЕХ ВЗБОДРИЛИ!!!
Счастливо!
ru.selenide.org
02.07.23