Вышла Selenide 5.22.0

Судный день

Блог

Вышла Selenide 5.22.0

Проснитесь, у нас снова релиз!

Добрый вечер!

Лучший подарок - сделанный своими коммитами.
В мой день 40 рождения мы выпустили юбилейный релиз Selenide 5.22.0.

Развернём упаковку?


Теперь можно закрыть алерт перед скачиванием файла

В Селениде есть метод $.download(), который работает по простому принципу:

  1. Кликни.
  2. Подожди, пока в папке появится нужный файл.

Проблема в том, что на некоторых сайтах после клика появляется алерт, который нужно закрыть, чтобы началось скачивание. Ну или вообще, нужно совершить ещё какое-то действие после или вместо клика, чтобы запустить скачивание файла.

Теперь можно будет закрыть алерт:

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


Ссылки

Ого-го! Сразу несколько известных ребят выложили свои видосики про Селенид.

И ещё всплыла парочка старых материалов:


И на десерт - молодое поколение учит Селенид:


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

ru.selenide.org

The project is maintained by