Rain Lag

Отладка по скриншоту: как ловить баги ещё до того, как вы откроете код

Как подход «сначала скриншот» — в связке с автоматизацией, аннотациями и метаданными — может радикально улучшить процесс отладки и сократить переписку между QA, поддержкой и разработкой.

Отладка по скриншоту: как ловить баги ещё до того, как вы откроете код

Если вы когда‑нибудь видели баг‑репорт примерно такого вида:

«Иногда кнопка пропадает, кажется, после нескольких нажатий. Вчера было.»

…вы понимаете, насколько мучительной бывает отладка на основе расплывчатого описания.

А что, если бы каждый баг сопровождался точным визуальным снимком интерфейса, всеми деталями окружения и ссылкой на воспроизведение действий пользователя незадолго до ошибки — ещё до того, как вы открыли редактор кода?

Именно это и обещает подход отладки по скриншоту (screenshot‑first debugging).

В этом посте вы узнаете, как:

  • Использовать автоматические скриншоты Chrome, чтобы фиксировать точное состояние UI в момент возникновения бага
  • Относиться к скриншотам как к визуальному доказательству, а не просто приятному приложению к задаче
  • Аннотировать скриншоты, чтобы сделать проблему максимально однозначной для разработчиков
  • Собирать критичные метаданные (браузер, ОС, размер вьюпорта, feature flags и т. д.) вместе с каждым скриншотом
  • Хранить исходный URL или путь запроса, чтобы инженеры точно знали, где искать
  • Комбинировать скриншоты с инструментами session replay для пошаговой видимости
  • Интегрировать всё это в практичный, малотренияй рабочий процесс

Почему «сначала скриншот» лучше, чем «сначала память»

Большинство команд до сих пор опираются на память или размытые баг‑репорты:

  • «Кажется, я кликнул сюда, и всё сломалось.»
  • «Выглядело странно, но я не успел это заскринить.»
  • «Иногда происходит только у меня на машине.»

Это приводит к тому, что:

  • QA/поддержка и разработка по сто раз ходят друг к другу с уточнениями
  • Уходит куча времени на воспроизведение редких «краевых» сценариев
  • Возникают споры, что именно видел пользователь на экране

Скриншоты переворачивают эту динамику.

Скриншот — это:

  • Замороженный момент времени — интерфейс ровно в том виде, в каком он был при возникновении бага
  • Объективное доказательство — без «кажется» и «вроде бы»
  • Удобный артефакт для шаринга и ревью — между командами и часовыми поясами

Вместо того чтобы начинать с кода и угадывать, что видел пользователь, вы начинаете с того, что пользователь действительно видел, а уже потом отматываете назад к коду.


Автоматические скриншоты в Chrome: ваш молчаливый ассистент по отладке

Никаких акробатик с Print Screen. Современные инструменты могут автоматически делать скриншоты в тот самый момент, когда обнаруживается баг.

Популярные варианты:

  • Playwright: отлично подходит для end‑to‑end тестов и кроссбраузерной автоматизации
  • Puppeteer: библиотека для Node.js для управления Chrome/Chromium
  • Selenium/WebDriver: работает с разными браузерами и языками
  • Команды Browser DevTools: Chrome DevTools Protocol (CDP) для триггера скриншотов
  • Расширения браузера: для оперативной работы саппорта и QA
  • Сторонние API: headless‑браузеры, которые делают скриншоты по URL

Пример: скриншот при падении теста (Playwright)

// playwright.config.ts import { defineConfig } from '@playwright/test'; export default defineConfig({ use: { screenshot: 'only-on-failure', // авто-снимок UI при падении теста }, });

Теперь каждый упавший тест автоматически сопровождается скриншотом. Когда CI‑джоб падает, разработчик видит не просто красный тест — он видит ровно то, что «видел» тест (пользователь) в момент сбоя.

Пример: скриншот при ошибке в Puppeteer

try { // ваши шаги теста } catch (err) { await page.screenshot({ path: 'error-state.png', fullPage: true }); throw err; }

Автоматические скриншоты означают, что доказательства для отладки готовы ещё до того, как кто‑то начнёт разбираться.


Относитесь к скриншотам как к визуальному доказательству, а не к декоративному приложению

Часто скриншоты воспринимают как необязательный аттач к баг‑репорту.

В культуре «сначала скриншот» они становятся обязательным артефактом.

Поменяйте привычки команды так, чтобы:

  • Каждый баг‑репорт содержал хотя бы один скриншот с некорректным состоянием
  • Команды поддержки и QA были приучены всегда ловить момент отказа
  • Разработчики смотрели скриншот до того, как уйти в логи, код и догадки

Думайте об этом как о бортовом самописце (flight recorder) для вашего UI.

Когда вы открываете тикет и сразу видите:

  • Разъехавшуюся вёрстку
  • Некорректное сообщение об ошибке
  • Пропавшую кнопку или наложившиеся компоненты

…загадка уже наполовину решена, ещё до того, как вы прочитаете строку кода.


Делайте баги однозначными: аннотируйте скриншоты

Обычный скриншот уже полезен, но аннотированный скриншот — это полноценный баг‑репорт в одном изображении.

Поощряйте команду:

  • Выделять неожиданное поведение (обводки, стрелки, рамки)
  • Добавлять короткие текстовые комментарии (например: «Здесь должно быть “Success”, а отображается “Error”»)
  • Помечать шаги воспроизведения прямо на картинке (1 → 2 → 3)

Можно использовать:

  • Встроенные инструменты ОС (Preview на macOS, Ножницы/Набросок на Windows)
  • Расширения браузера с возможностью разметки
  • Дизайн‑инструменты (Figma, Sketch, Photoshop) для сложных флоу

У этого есть два ключевых плюса:

  1. Разработчики быстрее понимают суть проблемы, меньше нужно читать.
  2. Меньше шансов, что баг поймут неправильно — не нужно гадать, какая именно часть UI некорректна.

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


Не забывайте о метаданных: контекст решает всё

Скриншот показывает, что случилось. Метаданные объясняют, где и при каких условиях это произошло.

Всегда собирайте (и сохраняйте) контекст, такой как:

  • Браузер и версия (Chrome 131.0.x, Firefox 132.x и т. д.)
  • Операционная система (Windows 11, macOS Sonoma, Ubuntu 22.04)
  • Размер вьюпорта / устройство (1440×900, эмуляция iPhone 15 Pro)
  • Пользователь / тип аккаунта (admin против стандартного пользователя)
  • Feature flags и эксперименты (варианты A/B‑тестов, включённые фичи)
  • Локаль и часовой пояс (ru-RU, en-US, UTC vs MSK/PST)
  • Временная метка (желательно в UTC) и окружение (prod/stage/dev)

Эти данные можно:

  • Наносить прямо на скриншот (небольшой блок в углу)
  • Хранить рядом с изображением (JSON‑файл, артефакт теста, поля тикета)

Для автотестов удобно вшивать часть контекста в имена файлов скриншотов или прикреплять как артефакты в CI.

Пример имени файла: checkout_error_chrome_131_mac_1440x900_flag-newCheckout_true_2025-02-17T10-03-00Z.png

С таким контекстом разработчик понимает, какое именно окружение нужно воссоздать и какие условия могли повлиять на баг.


Всегда добавляйте URL или полный путь запроса

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

Как минимум, сохраняйте:

  • Полный URL (включая query‑параметры)
  • Релевантный route или путь запроса (например, /checkout?step=review&coupon=BLACKFRIDAY)

Ещё лучше:

  • Добавлять критичные query‑параметры или части тела POST‑запроса, которые определяют состояние страницы
  • Если у вас SPA с клиентской маршрутизацией, фиксировать router path и состояние как метаданные

Практические варианты:

  • Нанести URL сверху/снизу на сам скриншот
  • Хранить URL в описании тикета или отдельным полем/метаданными
  • Логировать его как часть артефактов автотестов вместе со скриншотами

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


Усильте скриншоты с помощью session replay

Скриншоты отлично отвечают на вопрос «что», а session replay добавляет ответ на вопрос «как».

Инструменты session replay (например, FullStory, LogRocket, Hotjar, Sentry Replay и др.) записывают:

  • Клиki, скроллы, ввод в формы
  • Переходы между страницами
  • Ошибки в консоли и сетевые запросы

В связке с подходом «сначала скриншот» это работает так:

  • Скриншот показывает финальное сломанное состояние.
  • Ссылка на replay показывает точную последовательность действий, которая к нему привела.

Стремитесь к тому, чтобы для каждого бага были:

  1. Скриншот с некорректным UI
  2. Ссылка на session replay с действиями пользователя
  3. Метаданные + URL для воспроизведения окружения

Эта тройка резко снижает долю тикетов «Cannot reproduce» и количество догадок.


Как встроить подход «сначала скриншот» в рабочий процесс

Чтобы метод прижился, его нужно встроить в существующие процессы.

Для QA и автоматизированного тестирования

  • Настройте Playwright/Selenium/Puppeteer на создание скриншота при падении теста.
  • Храните скриншоты как артефакты CI, чтобы разработчики могли открыть их прямо из упавших джобов.
  • Добавьте в чек‑лист для ручного тестирования пункт: «При любой ошибке приложить аннотированный скриншот.»

Для поддержки и клиентских команд

  • Дайте им однокнопочный инструмент или браузерное расширение, которое:
    • Захватывает видимую часть страницы
    • Автоматически добавляет метаданные окружения
    • Отправляет изображение напрямую в вашу тикет‑систему
  • Обучите поддержку никогда не создавать баг без хотя бы одного скриншота или ссылки на replay.

Для разработчиков

  • При разборе бага сначала открывайте скриншот, затем:
    • Визуально подтверждайте проблему
    • Обращайте внимание на URL, флаги и окружение
    • Используйте этот контекст, чтобы воспроизвести баг локально или на стенде
  • Используйте аннотации и сами, когда передаёте баг дальше или просите уточнений.

Со временем это становится мышечной памятью: нет скриншота — нет бага.


Результат: меньше созвонов, быстрее фиксы, довольные команды

Отладка по скриншоту — это не про «модные тулзы», а про смену точки входа в расследование.

Вместо того чтобы начинать с:

  • логов,
  • догадок,
  • попыток воспроизведения,

…вы начинаете с доказательств.

Эффект:

  • QA и поддержка тратят меньше времени на повторные объяснения багов
  • Разработчики меньше гадают и больше чинят
  • Продуктовые менеджеры и стейкхолдеры получают более прозрачную картину проблем
  • Пользователи получают более быстрые и надёжные исправления

Комбинируя автоматические скриншоты Chrome, понятные аннотации, богатые метаданные, исходные URL и session replay, вы выстраиваете страховочную сеть для отладки, которая раньше ловит проблемы и делает их гораздо проще в диагностике.

Сделайте скриншоты первым шагом, а не запоздалой мыслью — и вы увидите, как меняется ваш процесс отладки.

Отладка по скриншоту: как ловить баги ещё до того, как вы откроете код | Rain Lag