Вышла Selenide 6.10.0

Вышла Selenide 6.10.0

Покрали енота
21.11.22


Недобрый вечер!

Вышел новый релиз Selenide 6.10.0.

Улучшили алгоритм скачивания файлов

Один из алгоритмов скачивания в Selenide - это FOLDER. Чтобы скачать файл, он кликает нужную кнопку и ждёт, пока в папке “Downloads” появится нужный файл.

File еноты = $("#stolenRaccoonsReport").download(using(FOLDER));
assertThat(еноты).hasName("еноты.xls");

Проблема в том, что этот алгоритм не очень хорошо работал в Firefox, когда скачивание идёт очень медленно. Оказалось, что Firefox сразу создаёт в папке два файла: “еноты.xls” и “еноты.xls.part”, и оба пустые. И лишь затем начинает их потихоньку заполнять.


В общем, наш алгоритм стал умнее. Теперь он

  1. Ждёт, когда в папке появятся хоть какие-нибудь подходящие файлы.
  2. Ждёт, когда пропадут все файлы *part (в Firefox).
  3. Ждёт, когда пропадут все файлы *crdownload (в Chrome).
  4. Ждёт, когда все файлы замрут как минимум на секунду (в остальных браузерах).

Такой подход должен обеспечить более надёжное скачивание файлов.

См. 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


Поддерживаем логин/пароль BasicAuth со спецсимволами

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:

https://Kr%C3%A1lovec:is+Czechia+%2F%3A%29@127.0.0.1:27663/basic-auth/hello

См. issue 2020 и PR 2021.


Обновили зависимости


Дочерние проекты

Также зарелизили наши дочерние проекты:


Новости

Мои свежие видосы

Появилось видео моих осенних докладов из таллиннского девклуба:

Видосы и читосы


Статистика

  • Наша группа в LinkedIn насчитывает уже 176 участников. Присоединяйтесь!
  • Подъехала свежая статистика скачиваний Селенида. Перевалили за 470 тыщ!


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

ru.selenide.org

21.11.22