Привет!
Кому пятничный релиз Selenide 7.16.0?
Целая цивилизация олдскульных ручных тестописцев погибнет сегодня вечером и больше никогда не возродится. Я не хочу, чтобы это произошло, и мне жаль этих медленных парней, но, вероятно, так и будет.
- Selenide MCP server
- Запилили вебсокеты в селенидовском прокси
- Поиск элемента по label
- CDP download в нескольких вкладках
- Алерты в Firefox
- Выключили “form resubmission confirmation dialog” в Firefox
$.ancestor()с несколькими классами- Видео рекордер с кастомным вебдрайвером
- Разрывы в записанных видео
- Обновили Selenium с 4.41.0 на 4.43.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.
СДЕЛАЕМ ДЖАВА ТЕСТЫ
СНОВА ВЕЛИКИМИ!
ru.selenide.org
10.04.26