ESPNAlonso hits 300th HR at Citi Field; ensuing curtain call 'crazy to me,' says ManaeaESPN DeportesMessi y el Inter Miami tienen nuevo entrenadorBollywood HungamaDiljit Dosanjh announces Ahmedabad concert at Narendra Modi Stadium on November 21 after sold-out Wembley showוואלהדיווח: גורמים אמריקניים נפגשו עם נציגי החות'ים - שהבטיחו שלא יתקפו ספינות ישראליותInquirerHouse mourns passing of former lawmaker, Quirino Gov. Dax CuaThe Jerusalem PostLondon Jews warn of security crisis after antisemitic arson attacksVanguardGOKABET Enters Nigeria’s Sports Betting Market With a Sportsbook Built for Serious Fans3DNewsПо Ace Combat 8: Wings of Theve выйдет короткометражка Hour Zero со звёздами «Остаться в живых» и «Кобра Кай» — первый эпизод уже доступенسكاي نيوز عربيةاستدعاء وطرد.. السويد تشدد موقفها تجاه إيران20 MinutenNächster «Hunger Games»-Film: Hier ist der neue TrailerThe South AfricanTatjana Smith makes shock dive back into the poolInteriaRosjanie ostrzelali duński śmigłowiec. Dowódca nagrodzony "za zasługi"
The Daily Newsstand · Free, Always
Wednesday, September 16, 2026

Playwright Codegen: где заканчивается магия и начинается ручной труд

Translate

Привет! Меня зовут Евгений Когтев, я руководитель направления разработки в команде дизайн-системы «LUNA» в Домклик. Хочу рассказать, как у нас появилась идея упростить создание тестов с помощью Codegen: просто ходишь по сайту, как обычный пользователь, а в соседнем окне послушно рождается аккуратный, подсвеченный синтаксисом код. Никакой магии — сплошная инженерия, подумали мы.

Для реализации мы выбрали Playwright — мощный, гибкий и активно развивающийся инструмент с большим сообществом. К тому же у нас его активно начали внедрять вместо собственной разработки на основе Selenium.

Запустив Codegen, мы сразу столкнулись с проблемой поиска локаторов по тестовому Data-атрибуту. Определяет он их хорошо, но если внутри есть, например, Span с текстом, в локаторе появлялся не Data-атрибут, а селектор с контентом, который нам не подходит. Выглядело это так:

Бейдж с ошибкой вылетает, если локатор найден не методом getByTestId

Бейдж с ошибкой вылетает, если локатор найден не методом getByTestId

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

Нам удалось преодолеть эти сложности и даже «протыкать» тесты, которые затем успешно прогонялись. Однако мы пришли к неприятному выводу: чтобы записывать их более-менее качественно, нужно понимать, куда нажимать, смотреть на то, что предлагает Codegen, и всё равно в результате лишних действий в процессе генерации теста получаются «мусорные» шаги.

Разбираться с такими проблемами силами разработчика, даже имея скриншоты шагов и скринкаст записи, выходит дороговато. Проще самостоятельно накодить весь тест.

Итоги

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

Пока мы решили сосредоточиться на создании CMS для написания тестовых сценариев, хранения и запуска по расписанию, а также для аналитики, и прикрутить Quality Gate в CI/CD. В планах — вернуться к упрощению создания тестов с помощью ИИ или Codegen и решить все проблемы после завершения работы над CMS.

Я планирую делиться опытом по созданию инфраструктуры для развития автотестирования. Очень интересно узнать, как другие справляются с проблемой покрытия продукта автотестами и поддержания их в актуальном состоянии. Получалось ли у кого-то упростить создание тестов с помощью ИИ или генерирования? Я постарался кратко описать наш случай — если хотите узнать подробнее, напишите в комментариях.

View the original on Хабр

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.