Вышла Selenide 7.16.0

Вышла Selenide 7.16.0

Selenide MCP server
10.04.26

Привет!

Кому пятничный релиз Selenide 7.16.0?

Целая цивилизация олдскульных ручных тестописцев погибнет сегодня вечером и больше никогда не возродится. Я не хочу, чтобы это произошло, и мне жаль этих медленных парней, но, вероятно, так и будет.


Selenide MCP server

Дожили!

Я откладывал этот день как мог. Я не верил в AI. Я сопротивлялся. В моей голове всё ещё свежи воспоминания о 29 августа 1997 года.

Но я сдался. Хрен с ним. Пусть.


Представляем вам Selenide MCP server

По сути, MCP даёт ИИ доступ к селенидовским методам.

Зачем? Да хрен его знает. Ну, типа он позволит ИИ запускать селенидовские методы и писать за вас тесты (как будто с селенидом это как-то сложно было!)

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

Как попробовать

Теперь вы можете в любой папке, в любом проекте создать вот такой файлик .mcp.json:

{
  "mcpServers": {
    "selenide": {
      "command": "npx",
      "args": [
        "selenide-mcp@7.16.0"
      ]
    }
}

И запустив какой-нибудь ИИ (я вот пробовал Claude), сказать ему:

> claude
> /mcp enable selenide
> Раб, нахреначь мне тестов для https://todomvc.com/examples/react/dist/

И он нахреначит. Поверьте мне. Грандиозные тесты. Самые лучшие тесты.

Спасибо

  • Спасибо Mikalai Alimenkou за мастер-класс по AI (тут есть видос)
  • Спасибо моему коллеге Aleksei Krassilnikov за то, что посидел со мной рядом и показал, как всё это ИИ-шаманство делается.

    Мы вдвоём с помощью нашего ИИ навайбкодили Selenide MCP для вашего ИИ. Чо делается…

См. issue 3091 и PR 3291.


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

Ну всё, потёк вайбкод по трубам. Эту штуку я бы без ИИ вряд ли когда-нибудь сделал.

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

Но этот прокси до сих пор не поддерживал вебсокеты. Если в вашем веб-приложении какие-то сообщения шлются через веб-сокеты, то при включённом прокси они не доходят.

А теперь доходят! И их даже можно слушать (и например, логировать или проверять). Вот так:

Configuration.proxyEnabled = true;
open("https://test.mybank.com");
getSelenideProxy().getProxy().addWebSocketListener((frame, message) -> {
  log.info("WebSocket opCode: {}, text: '{}', url: {}", frame.getOpcode(), frame.getTextContent(), message.getUrl());
});

Для этого нам с моим ИИ-рабом пришлось кое-что подправить и в LittleProxy, и в BrowserUpProxy.

Спасибо Valery Yatsynovich за поддержку проекта BrowserUpProxy и быстрые релизы.


Поиск элемента по label

Уже полгода в селениде есть поиск элемента по label:

$(byLabel("Song title")).val("Лебединое озеро");

Там была крошечная бага, если элемент с нужным текстом находился, но это был не <label>, а какой-нибудь вшивый <div>. Ну вот, типа исправили. Даже без ИИ справились.

См. issue 3280 и PR 3282.


CDP download в нескольких вкладках

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

В общем, и это подправили.

См. issue 3283 и PR 3284.


Алерты в Firefox

Я толком не понял, что случилось, но похоже, в новой версии FireFox поменялось поведение касательно алертов. Тех убогих модальных окошек, которые олдскульные разрабы до сих пор иногда пихают на странички. В общем, мы поменяли настройку “behavior for unhandled alerts” для Firefox с “accept” на “ignore”.

Кажется, это особо ничего не изменит, но имейте в виду. Вдруг все ваши тесты посыпятся из-за алертов. :)

См. PR 3285.


Выключили “form resubmission confirmation dialog” в Firefox

В продолжение предыдущией темы. Мы по умолчанию выключили “form resubmission confirmation dialog” в Firefox. Это один из тех модальных диаложков. Как будто он раньше не выскакивал, а теперь почему-то начал выскакивать (например, при рефреше страницы) и ломать тесты, и пришлось его вырубить.

См. PR 3285.


$.ancestor() с несколькими классами

В селениде давно уже есть метод $.ancestor(".container") (также известный как $.closest(".container")), который умеет находить ближайшего предка по имени класса, тэгу или атрибуту.

А теперь можно найти предка и по нескольким классам:

SelenideElement parent = `$.ancestor(".container.table.active")`;

См. PR 3286.


Видео рекордер

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

Видео рекордер с кастомным вебдрайвером

Изначально видео рекордер работал только с селенидовским встроенным вебдрайвером (который мы и рекомендуем всем использовать). А если вы задали свой кастомный вебдрайвер через WebDriverRunner.setWebDriver(), то его видео рекордер не видел. И видос получался пустым.
При этом ещё и Селенид писал ложное сообщение “Video recorded”, а никакого видео-то и не было. :)

Теперь эти проблемы исправлены.

  • Кастомный вебдрайвер из WebDriverRunner.setWebDriver() видео рекордер теперь тоже видит.
  • Если видос не записался, лживый лог “Video recorded” не появится.
  • Если CDP по какой-то причине не сработал (например, подходящей версии CDP не нашлось в classpath), видео рекордер переключится на стандартный вебдрайверовский метод для снятия скриншотов (он медленнее и ворует фокус, но работает).

См. issue 3278.
Спасибо Kamil Pająk за PR 3279.


Разрывы в записанных видео

Эту проблему я заметил только недавно, хотя по идее она должны была существовать уже полгода. Когда вы запускаете тест в Хроме с включёнными видео рекордером, то в этом видео иногда появляются 4-секундые разрывы.

Мы с моим ИИ-рабом хорошенько это дело подебажили и выяснили, что это происходит в те моменты, когда Хром обновляет страницу или переходит на другую страницу.

Дело было так:

  • видео рекордер посылает хрому CDP команду “captureScreenshot” и ждёт ответ (с таймаутом 4 секунды!)
  • веб-страница обновляется
  • в хроме старый контекст CDP пропадает и появляется новый
  • хром не может ответить на CDP команду - но и, зараза, ошибку тоже не посылает.
  • видео рекодер ждёт свои 4 секунды (в это время никаких скриншотов не делает), и только тогда CDP команда падает по таймауту. И только после этого видео рекордер продолжает делать следующие скриншоты.

Это похоже на багу хрома, и какого-то простого хорошего решения здесь не видно. Поэтому мы просто уменьшили таймаут для скриншотов до 300мс. Разрывы в видео останутся, но будут почти незаметны ¯¯_(ツ)_/¯¯

См. PR 3297.


Обновили Selenium с 4.41.0 на 4.43.0

И подняли версию CDP с v145 до v147.

Ченджлог

См. PR 3294 и PR 3296.


СДЕЛАЕМ ДЖАВА ТЕСТЫ
СНОВА ВЕЛИКИМИ!



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

ru.selenide.org

10.04.26