Посмотреть на страницу глазами браузера: что ушло на сервер, что пришло обратно и что осталось в браузере
Браузер отправляет на сервер запрос, сервер отвечает HTML-страницей, браузер её показывает и выполняет её скрипты. Нажали кнопку формы — браузер отправил новый запрос с введёнными данными. Отсюда две части любой проверки:
Это и есть серый ящик из раздела 02: код сервера мы не читаем, но видим, как он общается с браузером.
Проверку ввода делают в двух местах:
| На клиенте (в браузере) | На сервере | |
|---|---|---|
| Как | Атрибуты полей HTML: required, min, max, maxlength, type="email", pattern; скрипты страницы | Код сервера проверяет данные запроса |
| Зачем | Удобство: подсказка сразу, без отправки формы | Защита: только сервер решает, что сохранить |
| Можно обойти? | Да: инструменты разработчика, другой браузер, запрос без браузера | Нет — если проверка есть |
Главное правило: клиентская проверка — не защита. Если поле количества в магазине не даёт ввести 0 только атрибутом min="1", а сервер не проверяет, то заказ на 0 или −5 штук создаётся за минуту. Поэтому тестировщик проверяет оба уровня:
Если после шага 2 недопустимое значение сохранилось — это дефект сервера, и серьёзный: в баг-репорте так и пишите «серверная проверка отсутствует, клиентскую можно обойти».
DevTools открываются клавишей F12 или Ctrl+Shift+I; щелчок правой кнопкой по элементу → «Проверить» сразу показывает его код. Панели, которые нужны тестировщику:
| Панель | Что показывает | Зачем тестировщику |
|---|---|---|
| Elements (Элементы) | HTML страницы и стили, можно править на лету | Атрибуты полей, подписи, обход клиентской проверки |
| Console (Консоль) | Ошибки скриптов и сообщения; строка ввода команд JavaScript | Красные ошибки — признак дефекта, даже если на экране всё выглядит нормально |
| Network (Сеть) | Все запросы страницы: адрес, метод, код ответа, время, тело | Что отправила форма, что ответил сервер, где ошибка 500 |
| Application (Приложение) | Cookies, Local Storage, Session Storage | Сессия, выход, хранение данных в браузере |
| Lighthouse | Автоматический отчёт: производительность, доступность, SEO | Быстрый список проблем доступности |
Если DevTools открылись сбоку и тесно — меню ⋮ справа вверху панели → «Dock side» (расположение): снизу или в отдельном окне.
Значок со стрелкой в левом верхнем углу DevTools (или Ctrl+Shift+C) включает выбор элемента: щёлкните по полю на странице, и в панели Elements подсветится его код. На снимке — поле «Название» формы «Новая задача»: у него атрибут required, поэтому браузер не отправит форму с пустым полем.
Как обойти клиентскую проверку:
required, min="1", maxlength) и удалите его или исправьте значение. Можно правой кнопкой по узлу → «Edit as HTML».Правка действует до перезагрузки страницы и только в вашем браузере — ничего не ломается, сервер видит лишь отправленные данные. То же работает со списками <select>: допишите свой <option value="9"> и выберите его.
В Elements же проверяют подписи полей: у поля должен быть <label for="…"> с тем же id или атрибут aria-label. Текст-подсказка внутри пустого поля (placeholder) подписью не считается — он исчезает при вводе, и экранная читалка его может не прочитать.
Панель Console показывает ошибки скриптов страницы красным, с номером строки. Пользователь их не видит, но ошибка часто значит, что часть страницы перестала работать: кнопка не реагирует, список не обновился. Держите Console открытой, когда выполняете действия, особенно необычные: пустой список, ничего не найдено, очень длинный ввод.
Красный счётчик в правом верхнем углу DevTools показывает число ошибок, даже когда открыта другая панель. Ошибка загрузки favicon.ico (404 — у сайта нет значка вкладки) обычно безобидна; ошибки вида Uncaught TypeError: Cannot read properties of null — повод разобраться и, если что-то не работает, написать баг-репорт с текстом ошибки.
Консоль ещё и удобный калькулятор тестовых данных. Введите команду и нажмите Enter:
'a'.repeat(101) // строка из 101 символа
'я'.repeat(50).length // 50 — проверить длину
new Date().toISOString().slice(0, 10) // сегодняшняя дата 2026-10-29
Первый раз браузер может попросить разрешение вставлять код в консоль — введите allow pasting, если копируете команду, а не набираете.
Откройте Network до действия — запросы записываются только при открытой панели. На снимке — вход в «Задачник»: форма отправила POST /login, сервер ответил кодом 303 (перенаправление) и браузер сам запросил /tasks.
Щелчок по строке открывает подробности:
Set-Cookie и Cookie).Полезные флажки над списком: Keep log (в Chrome — Preserve log, «Сохранять журнал») — не очищать список при переходе на другую страницу: без него после щелчка по ссылке запросы прошлой страницы исчезают; Disable cache — загружать всё заново.
Коды ответов, которые встретятся чаще всего: 200 — успешно, 303 — перенаправление после отправки формы, 400 — неверный запрос, 401 — нужна авторизация, 404 — не найдено, 500 — ошибка сервера. Ответ 500 на любое действие пользователя — всегда дефект: сервер не справился с данными, а не отказал по правилам. Подробнее о кодах — в разделе 09.
После входа сервер присылает cookie — небольшую строку, которую браузер прикладывает к каждому следующему запросу. По ней сервер узнаёт пользователя. В «Задачнике» это cookie sid. Посмотреть её: Application → Storage → Cookies → http://127.0.0.1:8000.
Что видно в таблице cookies и что проверять:
Значок телефона и планшета в левом верхнем углу DevTools (Ctrl+Shift+M) переключает режим устройства: страница показывается в окне заданной ширины, как на телефоне. Сверху — выбор модели (Responsive — свой размер) и размеры в пикселях: щёлкните по ширине и впишите 360.
Ширины для проверки: 360 (самые узкие распространённые Android), 390–412 (большинство телефонов), 768 (планшет вертикально). Что смотреть:
Режим устройства — приближение: шрифты, клавиатура и жесты настоящего телефона отличаются. Перед выпуском откройте страницу и на реальном телефоне. «Задачник» слушает только 127.0.0.1, поэтому с телефона он не откроется — для него хватит режима устройства; свой проект проверяйте на телефоне.
Браузеры на движке Chromium (Chrome, Edge, Яндекс Браузер, Opera) показывают страницы почти одинаково; Firefox и Safari (на iPhone все браузеры работают на движке Safari) — по-своему. Минимальный набор: один браузер на Chromium и Firefox на компьютере, плюс браузер телефона. Что чаще всего отличается:
В баг-репорте всегда указывайте браузер с версией (меню → Справка → О программе): «Firefox 145, Windows 11». Дефект, который есть только в одном браузере, — важная деталь для разработчика.
Доступность — возможность пользоваться программой людям с нарушениями зрения, слуха, моторики. Требования к ней описаны в ГОСТ Р 52872 (основан на международном WCAG). Без специальных программ можно проверить главное:
| Проверка | Как | Что должно быть |
|---|---|---|
| Только клавиатура | Пройти форму клавишей Tab, нажимать кнопки Enter и Пробелом | Все поля и кнопки достижимы, порядок логичный |
| Видимый фокус | Там же: где сейчас фокус? | Активный элемент заметно выделен рамкой |
| Подписи полей | Elements: <label> или aria-label | У каждого поля есть подпись, не только placeholder |
| Масштаб 200% | Ctrl++ до 200% | Ничего не пропадает и не перекрывается |
| Контраст | Elements → выбрать текст → в Styles щёлкнуть по квадратику цвета: показан коэффициент контраста | Не меньше 4,5 : 1 для обычного текста |
| Не только цвет | Посмотреть, что выделено цветом | Ошибки и состояния понятны и без цвета: текстом, значком |
| Автоматический отчёт | Lighthouse → Accessibility → Analyze | Список проблем с подсказками; проверяет не всё |
Найденное оформляется баг-репортом как любой дефект; требование — пункт ТЗ о доступности, если он есть, или ГОСТ Р 52872.