Добрый вечер!
Лучший подарок - сделанный своими коммитами.
В мой день 40 рождения мы выпустили юбилейный релиз Selenide 5.22.0.
Развернём упаковку?
Теперь можно закрыть алерт перед скачиванием файла
В Селениде есть метод $.download()
, который работает по простому принципу:
- Кликни.
- Подожди, пока в папке появится нужный файл.
Проблема в том, что на некоторых сайтах после клика появляется алерт, который нужно закрыть, чтобы началось скачивание. Ну или вообще, нужно совершить ещё какое-то действие после или вместо клика, чтобы запустить скачивание файла.
Теперь можно будет закрыть алерт:
File downloadedFile = $(byText("Download me with alert")).download(
using(FOLDER).withAction(
clickAndConfirm("Are you sure to download it?")
)
);
или вообще совершить любое нужное действие:
File downloadedFile = $(byText("Download me with alert")).download(
using(PROXY).withAction((driver, link) -> {
// add cookies
link.click();
// driver.switchTo().window();
// alert.dismiss();
// send http request
// call api
}));
См. issue 1479 и PR 1481.
Доработали проверку Condition.textCaseSensitive
… чтобы она поддерживала выбранные опции в <select>
- по аналогии с Condition.text
.
Спасибо Oleg Berezhnoy за PR 1482.
Добавили селекторы byTextCaseInsensitive
и withTextCaseInsensitive
… для поиска элемента по тексту, игнорируя регистр.
Было
В селениде давно есть методы для поиска по тексту.
- по полному тексту:
$(byText("Wake up we have a tsar again")
- по подстроке:
$(withText("we have a tsar")
Эти селекторы чувствительны к регистру (и внутри используют XPath 1.0).
Стало
Теперь же мы добавили аналогичные методы, но нечувствительные к регистру:
$(byTextCaseInsensitive("wake UP we have a TSAR again")
$(withTextCaseInsensitive("TSAR agAiN")
Эти селекторы позволяют искать элементы, игнорируя большие-маленькие буквы.
Технический нюанс
этот функционал не получилось реализовать с помощью XPath, потому что строковые функции типа
lower-case
и match
появились лишь с версии XPath 2.0, а все современные браузеры поддерживают только XPath 1.0.
Поэтому пришлось наколбасить хитрый JS код для обхода всего дерева элементов.
См. issue 1380 и PR 1381.
Добавили метод Driver.getSessionId()
По сути он нужен для интеграции с Selenoid.
Спасибо Petro Ovcharenko за PR 1483.
Уменьшили селенимовские таймауты
Внутри селениума прошиты два таймаута, о которых вы, возможно, не догадывались. Проблема в том, что они анормально большие, и их невозможно поменять.
- Соединение с вебдрайвером:
connectTimeout
= 120000 ms = 2 минуты - Запрос к вебдрайверу:
readTimeout
= 10800000 ms = 3 часа (!)
Если какая-то операция с вебдрайвером подвисает, то ваш тест будет висеть 3 часа. Ну это же ненормально!
Например, так происходит, когда тестируется приложение на Electron, и оно уходит в трей, а тест пытается сделать
скриншот - и надолго зависает.
В Selenide 5.22.0 мы добавили возможность менять этот таймаут (под капотом используется жёсткий рефлекшин).
И да, мы сделали дефалтовые значения чуть поменьше (хоть и по-прежнему слишком консервативные):
connectTimeout
= 1 минутаreadTimeout
= 2 минуты
Давайте восприниматься это как костыль и надеяться, что в Selenium 4 появится более правильное решение.
См. PR 1433.
selenide-selenoid 1.1.3
Мы выпустили обновление selenide-selenoid:1.1.3
, в котором исправили ClassCastException
в некоторых случаях.
Спасибо Petro Ovcharenko за PR 10.
selenide-appium 1.6.6
Мы выпустили обновление selenide-appium:1.6.6
, в котором обновились на Selenide 5.22.0
Ссылки
Ого-го! Сразу несколько известных ребят выложили свои видосики про Селенид.
- Java champion Sebastian Daschner: Why I switched to using Selenide for UI tests
- JetBrains feat. DJ Юрий Артамонов: Modern UI Test Automation with Selenium Libraries
- Статья от JetBrains про этот стрим
И ещё всплыла парочка старых материалов:
- Сергей Брит Selenide. Tips and tricks, slides
- Selenide review by Provectus
И на десерт - молодое поколение учит Селенид:
ru.selenide.org
08.06.21