Почему Тестирование Доступности Важно
Веб-доступность (часто сокращается как a11y) обеспечивает возможность людям с ограниченными возможностями воспринимать, понимать, навигировать и взаимодействовать с сайтами. Это включает людей незрячих или со слабым зрением, глухих или слабослышащих, с моторными нарушениями, когнитивными ограничениями или временными нарушениями.
Доступность не является опциональной для QA:
- Законодательное требование — ADA (США), EAA (ЕС), AODA (Канада) обязывают обеспечивать веб-доступность
- Бизнес-влияние — 15-20% мирового населения имеют ту или иную форму инвалидности
- SEO-польза — Многие практики доступности улучшают поисковую оптимизацию
- Индикатор качества — Доступные сайты, как правило, лучше структурированы
Обзор WCAG 2.2
WCAG организован вокруг четырёх принципов (POUR):
Воспринимаемость (Perceivable)
Контент должен быть представлен способами, которые пользователи могут воспринять: текстовые альтернативы для изображений, субтитры для видео/аудио, адаптируемый контент, достаточный контраст цветов.
Управляемость (Operable)
Интерфейс должен быть навигируемым и управляемым: вся функциональность доступна с клавиатуры, достаточно времени для чтения, нет контента, вызывающего судороги, понятная навигация.
Понятность (Understandable)
Контент и интерфейс должны быть понятными: читаемый текст, предсказуемое поведение, помощь при вводе (идентификация ошибок, labels).
Надёжность (Robust)
Контент должен работать с текущими и будущими технологиями: валидный HTML, корректное использование ARIA, совместимость с ассистивными технологиями.
Уровни Соответствия
| Уровень | Описание | Типичное требование |
|---|---|---|
| A | Минимальная доступность | Редко достаточен |
| AA | Стандартное соответствие | Большинство законодательных требований |
| AAA | Улучшенная доступность | Только для специфических контекстов |
Большинство организаций нацеливаются на WCAG 2.2 Уровень AA.
Техники Ручного Тестирования
Тестирование Клавиатурной Навигации
Самый результативный ручной тест:
- Отложите мышь. Навигируйте по всей странице, используя только клавиатуру.
- Пройдите Tab по всем интерактивным элементам. Можете ли добраться до каждой ссылки, кнопки, поля формы и меню?
- Проверьте видимость фокуса. Есть ли видимый индикатор фокуса на текущем элементе?
- Проверьте клавиатурные ловушки. Можете ли войти и выйти Tab из модальных окон, выпадающих списков?
- Проверьте логичный порядок табуляции. Фокус перемещается в логичном порядке чтения?
| Клавиша | Ожидаемое действие |
|---|---|
| Tab | Перемещение к следующему интерактивному элементу |
| Shift+Tab | Перемещение к предыдущему интерактивному элементу |
| Enter | Активация ссылок и кнопок |
| Пробел | Переключение чекбоксов, активация кнопок |
| Стрелки | Навигация внутри меню, радиогрупп, вкладок |
| Escape | Закрытие модальных окон, выпадающих списков |
Тестирование со Screen Reader
Тестируйте хотя бы с одним screen reader:
| Платформа | Screen Reader | Браузер |
|---|---|---|
| Windows | NVDA (бесплатный) | Firefox |
| macOS | VoiceOver (встроенный) | Safari |
| iOS | VoiceOver (встроенный) | Safari |
| Android | TalkBack (встроенный) | Chrome |
Базовое тестирование VoiceOver на macOS:
- Нажмите Cmd+F5 для включения VoiceOver
- Используйте VO+Стрелка вправо (Ctrl+Option+Right) для навигации по контенту
- Слушайте: описания изображений, уровни заголовков, текст ссылок, labels форм
- Проверьте, что обновления динамического контента озвучиваются
Визуальное Тестирование и Тестирование Цвета
- Проверьте страницу в оттенках серого — передаётся ли информация только цветом?
- Проверьте коэффициенты контраста расширениями браузера (WAVE, axe DevTools)
- Увеличьте до 200% — работает ли вёрстка? Читается ли контент?
- Протестируйте в режиме высокой контрастности Windows
Автоматизированные Инструменты
axe-core
Наиболее распространённый движок тестирования доступности:
const { test, expect } = require('@playwright/test');
const AxeBuilder = require('@axe-core/playwright').default;
test('страница не имеет нарушений доступности', async ({ page }) => {
await page.goto('/');
const results = await new AxeBuilder({ page }).analyze();
expect(results.violations).toEqual([]);
});
WAVE Browser Extension
Бесплатное расширение браузера с визуальным наложением проблем доступности прямо на странице.
Упражнение: Аудит Доступности Веб-Страницы
Проведите комплексный аудит доступности, сочетая автоматизированное и ручное тестирование.
Часть 1: Автоматическое Сканирование
Запустите axe-core сканирование на странице по вашему выбору:
- Установите расширение axe DevTools
- Откройте страницу и запустите полное сканирование
- Задокументируйте все находки:
| Проблема | Критичность | Элемент | Критерий WCAG |
|---|---|---|---|
| Критическая/Серьёзная/Средняя/Незначительная |
Часть 2: Аудит Клавиатуры
Навигируйте по странице только с клавиатуры:
| Проверка | Пройдено/Не пройдено | Примечания |
|---|---|---|
| Все интерактивные элементы доступны через Tab | ||
| Видимый индикатор фокуса на каждом элементе | ||
| Логичный порядок табуляции | ||
| Можно войти и выйти из модальных окон | ||
| Выпадающие меню управляются стрелками | ||
| Ссылка «Пропустить навигацию» присутствует | ||
| Нет клавиатурных ловушек |
Часть 3: Проверка со Screen Reader
Включите VoiceOver (Mac) или NVDA (Windows) и навигируйте по странице:
| Проверка | Пройдено/Не пройдено | Примечания |
|---|---|---|
| Все изображения имеют осмысленный alt-текст | ||
| Заголовки образуют логичную иерархию | ||
| Поля формы имеют связанные labels | ||
| Ссылки имеют описательный текст | ||
| Изменения динамического контента озвучиваются | ||
| Язык страницы объявлен |
Решение: Пример Отчёта об Аудите Доступности
Проверенная страница: example-shop.com/products
Автоматический (axe-core) — 8 проблем найдено:
| Проблема | Критичность | Кол-во | Исправление |
|---|---|---|---|
| Изображения без alt-текста | Критическая | 4 | Добавить описательные alt-атрибуты |
| Поля формы без labels | Критическая | 2 | Связать <label> с каждым input |
| Недостаточный контраст | Серьёзная | 3 | Увеличить контраст до минимума 4.5:1 |
| Отсутствует язык страницы | Серьёзная | 1 | Добавить lang="en" к <html> |
Клавиатура — 3 проблемы:
- Фильтр товаров нельзя использовать стрелками — НЕ ПРОЙДЕНО
- Модальное окно без ловушки фокуса — НЕ ПРОЙДЕНО
- Нет ссылки «Пропустить навигацию» — НЕ ПРОЙДЕНО
Screen Reader — 2 проблемы:
- Цены товаров читаются как числа без валюты — запутывает
- Подтверждение «Добавить в корзину» не озвучивается
Приоритетные исправления:
- Добавить alt-текст к изображениям товаров (Критическая, простое исправление)
- Добавить labels к формам (Критическая, простое исправление)
- Исправить контраст (Серьёзная, изменения CSS)
- Добавить ловушку фокуса в модальное окно (Серьёзная, JavaScript)
- Добавить атрибут
lang(Серьёзная, одна строка) - Озвучить подтверждение корзины через aria-live регион
Интеграция A11y в Рабочий Процесс
Подход Shift-Left
- Фаза дизайна: Проверка макетов на контраст, состояния фокуса, иерархию заголовков
- Разработка: Использование axe-core линтера в IDE для обнаружения проблем до коммита
- Code review: Проверка alt-текста, ARIA-атрибутов, семантического HTML
- Тестирование: Автоматические axe-сканирования + ручное тестирование клавиатурой/screen reader
- CI/CD: Провал сборки при критических нарушениях доступности
Ключевые Выводы
- Тестирование доступности требует и автоматизированных инструментов, и ручного тестирования — по отдельности недостаточно
- Клавиатурное тестирование — самая результативная ручная проверка доступности
- Целевой уровень — WCAG 2.2 Level AA как минимальный стандарт
- Используйте axe-core в автоматизации тестов и CI/CD pipeline для непрерывной проверки
- Тестируйте хотя бы с одним screen reader для обнаружения проблем, которые автоматика упускает
- Баги доступности часто проще всего исправить, но они наиболее значимы для пользователей