Обработка inapplicable

Библиотека axe-core — один из наиболее мощных инструментов для автоматизированного тестирования доступности веб-приложений. Одним из ключевых понятий в этой библиотеке является статус inapplicable, который указывает на то, что определённое правило проверки доступности не применимо к данному элементу или контексту. Понимание работы с inapplicable критично для корректной интерпретации результатов сканирования и построения качественных отчётов о доступности.


Что такое inapplicable

В axe-core каждый тест или правило проверяет DOM на соответствие определённым критериям доступности, например, наличие альтернативного текста для изображений или корректную семантику элементов формы. Статус inapplicable появляется в следующих случаях:

  • Элемент не содержит признаков, к которым применимо правило.
  • Контекст элемента исключает возможность нарушения проверяемого критерия.
  • Условия предопределённой логики правила не выполнены.

Пример: правило image-alt проверяет наличие альтернативного текста у изображений (<img>). Если сканер встречает <div> без изображений, оно будет помечено как inapplicable, так как критерий к этому элементу неприменим.


Структура результата inapplicable

Результаты axe-core имеют унифицированную структуру JSON. Каждый результат содержит несколько ключевых полей:

{
  "id": "image-alt",
  "impact": "critical",
  "description": "Images must have alternate text",
  "tags": ["wcag2a", "wcag111"],
  "nodes": [
    {
      "html": "<div class='example'></div>",
      "target": ["div.example"],
      "failureSummary": "",
      "any": [],
      "all": [],
      "none": [],
      "status": "inapplicable"
    }
  ]
}

Ключевые моменты:

  • status — отражает результат проверки для конкретного узла. Значение inapplicable означает, что правило не применялось.
  • Поля any, all, none могут быть пустыми при inapplicable, так как нет условий, которые можно было бы оценить.
  • failureSummary не содержит текста, поскольку нарушений нет.

Причины появления inapplicable

  1. Отсутствие целевого элемента. Правило ожидает определённый тип элемента. Например, правило label для формы требует <input> с соответствующим <label>. Если <input> отсутствует, правило помечается как inapplicable.

  2. Элемент не активен или скрыт. Элементы с display: none или aria-hidden="true" часто автоматически становятся inapplicable для правил видимости или фокусируемости.

  3. Контекстные условия. Некоторые правила зависят от родительских или соседних элементов. Если контекст не соответствует, проверка пропускается.

  4. Специфические исключения. Axe-core содержит предопределённые исключения. Например, правило проверки color-contrast игнорирует элементы с прозрачным текстом или незначимый контент.


Работа с inapplicable при анализе результатов

Статус inapplicable не является ошибкой. Его правильная интерпретация позволяет:

  • Снижать ложные срабатывания.
  • Фокусироваться на реально проблемных элементах (violations).
  • Формировать отчёты с точной информацией о применимости правил.

Для удобного анализа можно фильтровать результаты по статусу:

const results = axe.run(document.body);

const inapplicableNodes = results.nodes.filter(node => node.status === 'inapplicable');
const violations = results.violations; // Только реальные нарушения

Такой подход позволяет отделять неприменимые проверки от нарушений доступности, обеспечивая чистоту отчёта.


Рекомендации по использованию

  • Не игнорировать полностью inapplicable. Иногда большое количество неприменимых правил может указывать на неправильную конфигурацию сканера или тестируемого DOM.
  • Использовать inapplicable для оптимизации тестов, исключая проверки, которые никогда не будут релевантными.
  • Понимать связь между inapplicable и контекстными условиями правил: это помогает точнее формулировать тестовые сценарии.

Примеры типичных правил с inapplicable

Правило Сценарий inapplicable
image-alt Элемент не <img> или <input type="image">
label Элемент формы без связанного <label>
color-contrast Элемент с прозрачным текстом или скрытый от пользователя
link-name Элемент без ссылки <a> или <area>
heading-order Элемент не является заголовком (<h1><h6>)

Каждый случай подчёркивает, что inapplicable не указывает на ошибку, а служит индикатором неприменимости правила к данному контексту.


Взаимодействие с другими статусами

В axe-core выделяются следующие статусы проверки:

  • passed — правило прошло успешно.
  • violated — обнаружено нарушение.
  • incomplete — проверка не была завершена.
  • inapplicable — правило не применялось.

Корректная фильтрация и интерпретация этих статусов позволяют строить полный и точный анализ доступности веб-приложения. Особенно важна разница между inapplicable и passed: первый не проверяет, второй подтверждает соответствие критериям.


Обработка inapplicable в axe-core — это фундаментальный механизм, который позволяет тестированию быть точным, исключая ложные срабатывания и фокусируясь только на реально проблемных элементах. Понимание структуры результатов и причин возникновения этого статуса необходимо для построения эффективных и надёжных проверок доступности.