Обработка inapplicable результатов

В библиотеке Axe-core результат с типом inapplicable указывает на элементы, для которых конкретное правило проверки недоступно или не применимо в текущем контексте. Такие результаты отличаются от violations и passes и требуют особого подхода при анализе отчетов доступности.


Понятие inapplicable

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

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

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

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

Каждый результат inapplicable содержит стандартные поля Axe-core:

{
  "id": "image-alt",
  "impact": null,
  "description": "Элемент не требует альтернативного текста",
  "nodes": [
    {
      "html": "<div class='placeholder'></div>",
      "target": ["div.placeholder"],
      "any": [],
      "all": [],
      "none": []
    }
  ]
}

Описание полей:

  • id — идентификатор правила, например image-alt, label, aria-roles.
  • impact — всегда null для inapplicable.
  • description — объясняет, почему правило не применяется.
  • nodes — массив элементов, для которых правило неприменимо, включая селекторы и HTML-код.

Применение при автоматизированном тестировании

  1. Фильтрация данных отчета

    Для отчетов с большим количеством элементов рекомендуется исключать inapplicable, чтобы отчет фокусировался на violations и passes:

    const results = axeResults.results;
    const violations = results.violations;
    const passes = results.passes;
    const inapplicable = results.inapplicable;
    
    console.log(`Найдено нарушений: ${violations.length}`);
    console.log(`Элементов с inapplicable: ${inapplicable.length}`);
  2. Анализ покрытия правил

    Количество inapplicable можно использовать для оценки, насколько выбранные правила подходят для текущей страницы:

    const totalRules = results.violations.length +
                       results.passes.length +
                       results.inapplicable.length;
    
    const applicableRate = (results.violations.length + results.passes.length) / totalRules;
    console.log(`Процент применимых правил: ${Math.round(applicableRate * 100)}%`);

Практические сценарии

  • Динамический контент: В SPA (Single Page Application) многие элементы создаются программно. Некоторые правила могут быть inapplicable на этапе рендера, а потом применимы после обновления DOM.
  • Многоуровневая валидация: Для компонентов с несколькими состояниями полезно хранить inapplicable для последующего анализа, чтобы исключить ложные пропуски проверки.
  • Масштабирование тестов: При тестировании больших приложений inapplicable помогает оптимизировать тестовые наборы, исключая проверки, которые систематически не применимы.

Работа с nodes в inapplicable

Каждый элемент в nodes содержит три основных массива: any, all, none. Для inapplicable они, как правило, пусты, но могут содержать условия, если правило применялось частично.

Пример фильтрации элементов по типу:

const inapplicableNodes = axeResults.results.inapplicable.flatMap(rule => rule.nodes);
const divElements = inapplicableNodes.filter(node => node.target[0].startsWith("div"));
console.log(divElements.length);

Логирование и визуализация

Для отчетов в CI/CD или для визуального анализа рекомендуется:

  • Разделять violations, passes и inapplicable на отдельные блоки.
  • Использовать цветовое кодирование для визуального различия.
  • Включать описание inapplicable с указанием причины, чтобы разработчики понимали, почему правило не сработало.

Пример в Node.js с использованием console.table:

console.table(inapplicable.map(rule => ({
  Rule: rule.id,
  Description: rule.description,
  Elements: rule.nodes.length
})));

Итоговые рекомендации по inapplicable

  • Не игнорировать полностью — эти результаты помогают понимать область применения правил.
  • Использовать для оптимизации набора проверок и повышения производительности тестов.
  • Хранить для исторического анализа изменений DOM и покрытия доступности.

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