Вышел новый релиз Selenide 6.10.0.
Один из алгоритмов скачивания в Selenide - это FOLDER. Чтобы скачать файл, он кликает нужную кнопку и ждёт, пока в папке “Downloads” появится нужный файл.
File еноты = $("#stolenRaccoonsReport").download(using(FOLDER));
assertThat(еноты).hasName("еноты.xls");
Проблема в том, что этот алгоритм не очень хорошо работал в Firefox, когда скачивание идёт очень медленно. Оказалось, что Firefox сразу создаёт в папке два файла: “еноты.xls” и “еноты.xls.part”, и оба пустые. И лишь затем начинает их потихоньку заполнять.
В общем, наш алгоритм стал умнее. Теперь он
*part
(в Firefox).*crdownload
(в Chrome).Такой подход должен обеспечить более надёжное скачивание файлов.
См. issue 1989 и PR 2003.
Часто люди выставляют большой таймаут на скачивание файла. Особенно если файл большой:
File video = $("#skaebova").download(using(FOLDER)
.withTimeout(Duration.ofSeconds(99))
.withName("пыня мобшиза.MP4"));
Но незачем ждать так долго, если скачивание даже не началось. Например, если клик тупо не попал по кнопке (как это бывает, я рассказывал в видео “Flaky tests”.
Для ускорения падения теперь можно задать второй параметр “increment timeout”:
File video = $("#skaebova").download(using(FOLDER)
.withTimeout(ofSeconds(99))
.withIncrementTimeout(ofSeconds(2))
.withName("пыня мобшиза.MP4"));
В этом случае общий таймаут на скачивание 99 секунд, НО если в течение 2 секунд не было никаких изменений в папке для скачивания, то метод выкинет ошибку сразу.
См. issue 1990 и PR 2023.
<select>
через JavaScriptЭто должно сделать работу с селектами быстрее. И теперь селенид выкидывает более подробную ошибку, если <select>
(или <option>
) оказался disabled
.
Например, для такого селекта:
<select id="region">
<option value="belgorod">Belgorod</option>
<option value="kherson" disabled>Kherson</option>
<option value="zaporozhia" disabled>Zaporozhia</option>
</select>
Попытка выбрать disabled
опцию:
$("#region").selectOption("Kherson");
выдаст понятную ошибку с подробным объяснением:
Invalid element state [#region/option[text:Kherson]]: Cannot select a disabled option
Раньше эта ошибка была не такой подробной:
java.lang.UnsupportedOperationException: You may not select a disabled option
(а ещё раньше такой тест вообще не падал, но и опцию не выбирал)
См. issue 1553 и PR 1876.
Отдельное спасибо Oleg Berezhnoy за PR 1553, который хоть и не попал в селенид, но инициировал целую дискуссию и в селениде, и в самом селениуме, в т.ч. о том, за что должен или не должен отвечать селениум, и что такое “просто фреймворк” и “опионейтед фреймворк”.
$.click(options)
“чейнебл”Люди часто жалуются, что метод $.click()
имеет тип void
, то есть его нельзя чейнить:
$(".btn").click().should(disappear);
Увы, это мы исправить не можем, т.к. класс SelenideElement
наследует метод void click()
из селениумовского WebElement
.
Но мы сделали “чейнебл” другой click
метод, который с параметрами (т.н. “оверлоадед”). Теперь хотя бы его можно “чейнить”:
$(".btn")
.click(usingDefaultMethod())
.should(disappear);
$(".btn")
.click(usingDefaultMethod().withOffset(42, 42))
.shouldHave(cssClass("alert"));
См. issue 2007 и PR 2008.
Спасибо Boris Osipov за PR 2017.
P.S. Исправили ещё раз в Selenide 6.10.1
Selenide умеет открывать сайты, защищённые паролем (т.н. BasicAuth):
open("/basic-auth/hello", BASIC,
new BasicAuthCredentials("", "Královec", "is Czechia /:)"));
Эти логин-пароль добавляются либо в http заголовок Authorization
(если прокси включён), либо в URL (если прокси выключен).
Недавно я обнаружил, что второй способ работает некорректно, если логин или пароль содержат спецсимволы. При добавлении в URL эти символы не экранировались, и получался невалидный URL:
https://Královec:is Czechia /:)@127.0.0.1:4405/basic-auth/hello
и браузер не мог открыть страницу.
Мне по-настоящему неловко, что я как-то не увидел этой страницы. Надеюсь, вы меня простите.
В общем, теперь такие хитрые пароли тоже должны работать. Селенид экранирует все спецсимволы и генерирует корректный URL:
См. issue 2020 и PR 2021.
Также зарелизили наши дочерние проекты:
Появилось видео моих осенних докладов из таллиннского девклуба: