Modern QA2026Автоматизация соответствия WCAG 2.1 AA
Join

Course10 Visual & Accessibility Testing

Cutting-edge · Chapter 10

Автоматизация соответствия WCAG 2.1 AA

Updated Jul 2026

Стандарт

Руководство по обеспечению доступности веб-контента (WCAG) 2.1 на уровне соответствия AA — это стандарт, на который ссылается большинство законов. Он определяет критерии успеха по четырём принципам (Воспринимаемость, Управляемость, Понятность, Надёжность), которые делают веб-контент доступным для людей с ограниченными возможностями.

Автоматизация проверок соответствия выявляет примерно 30-40% проблем доступности — остальные требуют ручного тестирования и экспертной оценки. Эти 30-40% включают наиболее распространённые нарушения: отсутствующий alt-текст, недостаточный цветовой контраст, отсутствующие метки форм и нарушенную иерархию заголовков. Автоматическое выявление этих проблем при каждом PR — минимально необходимая практика обеспечения доступности.

Что можно автоматизировать, а что нельзя

Можно автоматизировать Требует экспертной оценки
Отсутствующий alt-текст на изображениях Является ли alt-текст осмысленным
Коэффициенты цветового контраста Используется ли цвет для передачи смысла
Отсутствующие метки форм Является ли текст метки понятным
Отсутствующие роли ARIA Являются ли роли ARIA корректными
Фокусируемость с клавиатуры Является ли порядок фокуса логичным
Иерархия заголовков (h1-h6) Описывают ли заголовки контент
Наличие атрибута lang Корректен ли язык для контента
Наличие текста ссылок Является ли «нажмите здесь» достаточно описательным
Дублирование ID Являются ли ссылки на ID семантически корректными
Наличие заголовков таблиц Структурированы ли таблицы данных логично

Соотношение 30/70

Автоматизированные инструменты отвечают на вопросы «присутствует ли?». Люди (или AI-агенты) должны отвечать на вопросы «корректно ли?».

Automated: "Does this image have an alt attribute?"  -> Yes/No
Human:     "Does the alt text accurately describe the image for
            someone who cannot see it?"                -> Judgment required

Automated: "Is the color contrast ratio >= 4.5:1?"   -> Yes/No
Human:     "Is color the ONLY way this information
            is communicated?"                          -> Judgment required

Automated: "Does this form input have a <label>?"    -> Yes/No
Human:     "Does the label clearly explain what
            the user should enter?"                    -> Judgment required

Обзор критериев успеха WCAG 2.1 AA

Принцип Ключевые критерии Автоматизируемо? Частые нарушения
Воспринимаемость 1.1.1 Нетекстовый контент Частично Отсутствующий alt-текст
1.3.1 Информация и взаимосвязи Частично Отсутствующие заголовки, плохая структура таблиц
1.4.3 Контраст (минимум) Да Текст ниже соотношения 4.5:1
1.4.11 Контраст нетекстовых элементов Частично UI-компоненты ниже соотношения 3:1
Управляемость 2.1.1 Клавиатура Частично Нефокусируемые интерактивные элементы
2.4.3 Порядок фокуса Нет Нелогичная последовательность tab
2.4.4 Назначение ссылки Нет Ссылки «Нажмите здесь»
2.4.7 Видимый фокус Частично Отсутствующие индикаторы фокуса
Понятность 3.1.1 Язык страницы Да Отсутствующий атрибут lang
3.2.1 При фокусе Нет Неожиданные изменения контекста
3.3.2 Метки или инструкции Частично Отсутствующие метки форм
Надёжность 4.1.1 Парсинг Да Дублирование ID, невалидный HTML
4.1.2 Имя, роль, значение Частично Отсутствующие атрибуты ARIA

Построение стратегии тестирования доступности

Уровень 1: автоматическое сканирование (каждый PR)

Запускайте axe-core или аналогичные инструменты на каждой странице при каждом PR. Это выявляет 30-40% проблем, обнаруживаемых сканированием на основе правил.

# Minimum viable accessibility CI
npx playwright test tests/accessibility/ --reporter=json > a11y-results.json

Уровень 2: AI-аудит (еженедельно)

Используйте AI-агентов для оценки качественных аспектов — качества alt-текста, потока чтения, ясности сообщений об ошибках. Это выявляет дополнительные 20-30% проблем.

Уровень 3: ручной экспертный аудит (ежеквартально)

Эксперт по доступности использует экранные чтецы, навигацию только клавиатурой и инструменты увеличения для поиска оставшихся проблем. Это незаменимо для сложных взаимодействий, когнитивной доступности и соответствия WCAG AAA.

Уровень 4: пользовательское тестирование (раз в полгода)

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

Быстрые победы: наиболее частые нарушения WCAG

Эти пять нарушений составляют большинство проблем доступности, обнаруживаемых автоматическим сканированием:

  1. Отсутствующий alt-текст (WCAG 1.1.1) -- каждое значимое изображение нуждается в описательном alt-тексте
  2. Недостаточный цветовой контраст (WCAG 1.4.3) -- текст должен иметь контраст 4.5:1 относительно фона
  3. Отсутствующие метки форм (WCAG 1.3.1) -- каждый input нуждается в связанном <label>
  4. Пустые ссылки (WCAG 2.4.4) -- ссылки должны иметь различимый текст
  5. Отсутствующий язык документа (WCAG 3.1.1) -- <html lang="en"> должен присутствовать

Исправление этих пяти проблем устраняет большинство автоматически обнаруживаемых нарушений доступности. Они просты в исправлении и легко тестируемы.

<!-- Fix #1: Add alt text -->
<img src="product.jpg" alt="Blue running shoes, size 10">

<!-- Fix #2: Use sufficient contrast -->
<style>
    /* BAD: #999 on white = 2.85:1 ratio */
    .label { color: #999; }
    /* GOOD: #595959 on white = 7:1 ratio */
    .label { color: #595959; }
</style>

<!-- Fix #3: Associate labels with inputs -->
<label for="email">Email address</label>
<input id="email" type="email" name="email">

<!-- Fix #4: Give links meaningful text -->
<!-- BAD -->
<a href="/products">Click here</a>
<!-- GOOD -->
<a href="/products">View all products</a>

<!-- Fix #5: Set document language -->
<html lang="en">

Эти исправления занимают минуты каждое и оказывают непропорционально большое влияние на оценки соответствия доступности и реальный пользовательский опыт.

Интеграция проверок соответствия в ваш рабочий процесс

Pre-commit: линтинг HTML на доступность

До того как код попадёт в CI, линтуйте HTML-шаблоны на типичные нарушения:

# Using axe-linter or htmlhint with accessibility rules
npx htmlhint --rules "alt-require,title-require" src/**/*.html

CI: автоматическое сканирование страниц

Запускайте axe-core на каждой странице вашего приложения в CI. Блокируйте сборку при критических и серьёзных нарушениях, предупреждайте при умеренных.

// tests/accessibility/scan-all-pages.spec.ts
import { test, expect } from '@playwright/test';
import AxeBuilder from '@axe-core/playwright';

const pages = [
    '/',
    '/products',
    '/cart',
    '/checkout',
    '/account',
    '/help',
];

for (const pagePath of pages) {
    test(`a11y scan: ${pagePath}`, async ({ page }) => {
        await page.goto(pagePath);
        const results = await new AxeBuilder({ page })
            .withTags(['wcag2a', 'wcag2aa'])
            .analyze();

        // Fail on critical and serious
        const blocking = results.violations.filter(
            v => v.impact === 'critical' || v.impact === 'serious'
        );
        expect(blocking).toEqual([]);
    });
}

Пост-релиз: мониторинг

После развёртывания запускайте периодические сканирования доступности на продакшене для выявления регрессий, внесённых изменениями контента, обновлениями CMS или инъекциями сторонних скриптов, обходящих CI.

Маппинг WCAG на типы тестов

Критерий WCAG Тип теста Инструмент
1.1.1 Нетекстовый контент Автоматический + AI-ревью axe-core + AI-агент
1.4.3 Контраст Полностью автоматический axe-core
2.1.1 Клавиатура Полуавтоматический Тесты клавиатуры Playwright
2.4.7 Видимый фокус Полуавтоматический Визуальная регрессия состояний фокуса
3.3.1 Идентификация ошибок Ручной + AI AI-агент + ревью человеком
4.1.2 Имя, роль, значение Автоматический Проверки ARIA axe-core

Этот маппинг помогает командам решить, куда инвестировать усилия в автоматизацию, а где экспертная оценка человека незаменима.