Вышла Selenide 6.11.0

Вышла Selenide 6.11.0

Итоги 2022 года
03.01.23


С Новым Годом, друзья!

Дедушка Мороз принёс нам новый релиз Selenide 6.11.0.

Добавили методы для копирования текста

Мы добавили два новых метода:

  • Selenide.copy() - копирует выделенный текст в буфер обмена, и
  • $.paste() вставляет текст из буфера обмена в поле ввода.
open("https://best-propaganda-quotes.ru");
$("#solovjov").doubleClick(); // select the quote text
Selenide.copy();
$("[name=q]").paste();
$("[name=q]").shouldHave(text("Обсираться мелкими алмазами на берегу озера Комо"));

Известные ограничения: пока что эти методы не работают на серверных линуксах (без графического окружения). Но запуск xvfb должен помочь.

См. issue 1817.
Спасибо Evgenii Plugatar за PR 2027.


Исправили метод Selenide.download(url)

…для случая, когда url содержит логин/пароль (т.е. ресурс защищён BasicAuth).

Например, такой код раньше работал, но сломался после обновления Apache Http client:

File f = Selenide.download("https://admin:tiger@the-internet.herokuapp.com/basic_auth");

Оказалось, что в Apache Http client усилили валидацию URL, и часть с логином и паролем больше не разрешена (это типа небезопасная практика).

Ну а селенид теперь вырезает эту часть и посылает с запросом в заголовке Authorization.

См. issue 2037 и PR 2102.


Позволяем скачивать большие файлы через прокси

Если вы скачиваете файлы методом PROXY, то размер файла не мог превышать 64 мегабайта. Изначально это казалось разумным ограничением: зачем кому-то нужно нагружать тестовый стенд, скачивая гигантские файлы? (64 и то многовато, по умолчанию в BrowserUpProxy вообще было 2 мегабайта; мы увеличили лимит до 64 в селениде)

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

File favoriteMovie = $("#topMovie").download();
assertThat(favoriteMovie)
  .hasName("BadSanta.avi")
  .as("2 GB").hasSize(2147483648L);

P.S. Но имейте в виду, со слишком большими файлами, скорее всего, прокси всё равно не справится (либо будет скачивать слишком долго). И BrowserUpProxy по-прежнему имеет встроенное техническое ограничение в 2 гигабайта (потому, что тип данных - Integer).

Но хотя бы файлы по 200 мегабайтов вы вполне сможете скачивать.

См. issue 2082 и PR 2098.


Можно обрабатывать неожиданные алерты

По умолчанию, селенид игнорирует неожиданные алерты в браузере (точнее, запускает вебдрайвер с опцией capabilities.setCapability(UNHANDLED_PROMPT_BEHAVIOUR, ACCEPT)).

С одной стороны, это удобно, чтобы тесты не ломались от внезапно всплывающих реклам и других бесполезных сообщений. С другой стороны, иногда эти алерты могут содержать полезную информацию - в частности, ценное сообщение об ошибке.

Если это ваш случай, теперь вы можете переопределить эту настройку:

import static org.openqa.selenium.remote.CapabilityType.UNHANDLED_PROMPT_BEHAVIOUR;
import static org.openqa.selenium.UnexpectedAlertBehaviour.ACCEPT_AND_NOTIFY;

Configuration.browserCapabilities.setCapability(UNHANDLED_PROMPT_BEHAVIOUR, ACCEPT_AND_NOTIFY);

И тогда при возникновении нежданных алертов вы узнаете, какой текст в них был:

UnhandledAlertException: unexpected alert open: {Alert text : Как жопа, рогозин?} // chrome
UnhandledAlertException: Accepted user prompt dialog: Маршрут через мост недоступен. Чот бахнуло. // firefox
UnhandledAlertException: unexpected alert open: {Alert text : Обнаружены боевые комары-убийцы}  // edge
UnhandledAlertException: : Обнаружена грязная бомба // safari

См. issue 2054 и PR 2095.


Исправили пермиссии файла скриншота

Как вы знаете, при падении теста селенид автоматически сохраняет скриншот и создаёт два файла: *.png и *.html. Так вот выяснилось, что селенид создаёт эти два файла с разными пермиссиями:

-rw------- 1 root root 300295 Dec 19 10:24 1671441847908.0.png
-rw-r--r-- 1 root root 185070 Dec 19 10:24 1671441847908.0.html

И кое-кому это помешало писать сложносочинённые CI скрипты, выполняющие команды из-под разных юзеров. Чем бы девопс не тешился… :)

В общем, теперь у обоих будет “обычные” пермиссии -rw-r--r--.

См. issue 2081 и PR 2084.


Поддержка аннотации @As для полей без @FindBy

В селениде уже давно можно задавать удобные имена элементам пэдж обжекты (т.н. “алиасы”) с помощью метода as:

class LoginPage {
  SelenideElement loginButton = $(By.xpath("/long/ugly/xpath[3]")).as("Login button");
}

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

В общем, теперь алиас можно задать и с помощью аннотации @As:

class LoginPage {
  @As("Login button")
  SelenideElement loginButton = $(By.xpath("/long/ugly/xpath[3]"));
}

Но естественно, аннотация сработает, только если вы инициализируете пэдж обжект с помощью метода Selenide.page() или Selenide.open()

См. issue 2087 и PR 2088.


Метод для последнего сохранённого исходника страницы

Редко когда это нужно, так что не заморачивайтесь. По сути добавили методы ScreenShotLaboratory: threadScreenshots(), contextScreenshots(), lastThreadScreenshot(), lastContextScreenshot().

Спасибо Arman Ayvazyan за PR 2065.


Теперь можно добавлять URL страницы в сообщение об ошибке

Кому-то это полезно, кому-то вредно. После долгих споров сделали эту возможность опциональной (в виде плагина).

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

См. issue 980 и PR 2097.


Итоги года

Подведём итоги 2022 года? За этот год Selenide был упомянут в нескольких топах:

И наконец,

Количество скачиваний селенида выросло аж в полтора раза:

с 302 тысяч в январе до 469 тысяч в ноябре.

И всё-таки

Это был ужасный год. Но я рад, что я смог использовать накопленный багаж в виде сайта selenide.org и его аудитории, чтобы распространять антивоенную позицию. Кажется, здесь собрались люди, которые эту позицию разделяют. Чему я тоже очень рад.

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

А прекрасная свободная страна Украина отстроится и будет цвести пуще прежнего.

И через год мы с вами увидимся в Киеве на замечательной конференции SeleniumCamp.

Героям слава!


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

ru.selenide.org

03.01.23