Вышла Selenide 6.17.1

Вышла Selenide 6.17.1

Сим-сим, отвисни!
20.08.23

Доброе утро!

Сегодня 20 августа - День Восстановления Независимости Эстонии.

В честь этого праздника - небольшой релиз Selenide 6.17.1!

Отвисли зависающий вебдрайвер

В релизе Selenide 6.16.0 (на самом деле PR 2358), в селениде случайно появилась бага, из-за которой вебдрайвер мог легко зависнуть. А именно, если вызвать два раза подряд open(url, pageClass), то вебдрайвер накрепко зависает.

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

Вот такие ничоси. :)

  @Test
  public void вот_этот_кусок_зависает() {
    Selenide.open("https://www.google.com/", GooglePage.class);
    Selenide.open("https://www.google.com/", GooglePage.class);
  }

На самом деле это оказалась бага в вебдрайвере, она легко повторяется и с чистым селениумом. А изменения в Selenide 6.16.0 просто сделали её повторение более вероятным.

В общем, проблему мы исправили для большинства пользователей. Но не для всех (грубо говоря, селенид просто старается не вызывать опасный код, пока для этого нет явной необходимости).
А полного исправления придётся ждать на стороне ведрайвера.

См. issue 2424 и PR 2428.

Огромное спасибо extryd за чёткое описание проблемы с ультрапростыми инструкциями, как её стабильно повторить. Такое описание бага - неоценимая помощь мейнтейнерам. Все бы тикеты такие были!


Добавили поддержку $.type() в мобилках

В предыдущем релизе появился метод

  $.type("Биомеханоиды и трансгендеры");

который вбивает текст медленно, с задержками. Полезно для тестирования автозаполнения, поиска и т.п.

Но оказалось, что он не работал в мобилках (selenide-appium). Теперь будет работать.

См. issue и PR 2408.


Исправили метод $.type(Keys.*)

Вышеупомянутый метод type принимает не только строки, но и CharSequence. Что означает, что такой вариант тоже должен работать:

  import org.openqa.selenium.Keys;

  $("input").type(Keys.ENTER);

Вот только он ломался, потому что пытался закастить Keys.ENTER (который вообще-то CharSequence) к типу String. В общем, теперь этот вариант тоже будет работать (хотя польза от него неясна).

Спасибо Oleg Berezhnoy за наблюдательность и issue 2422.
Фикс в PR 2421.


Убрали пробелы с концов в $$.texts()

В Selenide 6.16.0 мы ускорили работу с коллекциями с помощью вставок JavaScript кода.
Но вечновнимательный Oleg Berezhnoy заметил, что при этом мы случайно поменяли поведение метода $$.texts(). Раньше он возвращал список текстов элементов, в которых пробелы в начале и конце обрезаны:

  assertThat($$(".burnees").texts()).isEqualTo(List.of(
    "Сиг",
    "Оленегорский горняк",
    "Авиабаза Сольцы",
    "Чонгарский мост",
    "Гениченский мост"
  ));

А с 6.16.0 стал возвращать тексты элементов вместе с пробелами:

  assertThat($$(".burnees").texts()).isEqualTo(List.of(
    "  Сиг   ",
    "    Оленегорский горняк   ",
    "       Авиабаза Сольцы      ",
    "          Чонгарский мост       ",
    "              Гениченский мост       "
  ));

Возможно, это спорный вопрос, как правильно, но во всяком случае так работает стандартный метод WebElement.getText(). Спорить не стали. Теперь $$.texts() снова обрезает пробелы в голове и хвосте.

См. issue 2419 и PR 2427.


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

ru.selenide.org

20.08.23