Библиотека Axe-core представляет собой инструмент для автоматизированной проверки доступности веб-приложений. Одной из ключевых возможностей является расширение набора правил, что позволяет проверять специфические требования к доступности, характерные для конкретного проекта. Регистрация нового правила осуществляется через API библиотеки и требует точного понимания структуры правил и объектов, которые Axe-core использует для анализа DOM.
Каждое правило в Axe-core определяется объектом с набором обязательных и необязательных свойств. Основные ключи объекта правила:
id — уникальный идентификатор правила. Используется для
ссылки на правило при запуске проверок.context — CSS-селектор или функция, определяющая
область применения правила. Правило будет применяться ко всем элементам,
соответствующим контексту.enabled — логическое значение, указывающее, включено ли
правило по умолчанию.tags — массив тегов, определяющий категорию правила
(например, wcag2a, wcag2aa,
best-practice).description — текстовое описание цели проверки.help — краткая подсказка для пользователя о том, как
исправить найденные нарушения.helpUrl — ссылка на документацию или рекомендации по
исправлению.check — функция, выполняющая фактическую проверку
элемента. Именно здесь реализуется логика анализа доступности.Пример минимального объекта правила:
const customRule = {
id: 'custom-button-label',
context: 'button',
enabled: true,
tags: ['wcag2a', 'best-practice'],
description: 'Проверяет, что кнопка имеет текстовую метку',
help: 'Добавить текстовую метку к кнопке для доступности',
helpUrl: 'https://www.w3.org/WAI/WCAG21/Techniques/html/H37',
check: function(node, options) {
return {
result: node.textContent.trim() !== ''
};
}
};
Для регистрации собственного правила используется метод
axe.registerRule(rule). Он принимает один объект правила
или массив правил. Пример:
axe.registerRule(customRule);
После регистрации правило становится доступным при последующих
вызовах axe.run. Важно учитывать, что правила
регистрируются глобально для текущего контекста библиотеки и могут быть
отключены или модифицированы через дополнительные настройки.
Контекст правила задаёт, к каким элементам будет применяться проверка. Возможны следующие варианты:
querySelectorAll:context: 'input[type="text"]'
true или false:context: function(node) {
return node.tagName === 'IMG' && node.alt === '';
}
Использование функций позволяет реализовать сложные условия, зависящие от атрибутов, структуры DOM или других свойств элемента.
checkФункция check является ядром правила. Она принимает два
параметра:
node — текущий DOM-элемент, соответствующий
контексту.options — дополнительные параметры, передаваемые при
запуске проверки.Функция должна возвращать объект с обязательным ключом
result:
result: true — элемент прошёл проверку.result: false — элемент нарушает правило.Дополнительно можно возвращать информацию о нарушении:
return {
result: node.hasAttribute('aria-label'),
message: 'Элемент должен иметь атрибут aria-label'
};
Сообщение message будет отображаться в отчётах Axe-core,
облегчая анализ проблем доступности.
Axe-core поддерживает регистрацию массива правил:
axe.registerRule([rule1, rule2, rule3]);
Это удобно для крупных проектов, где необходимо внедрить набор кастомных проверок для разных типов компонентов.
Каждое правило может быть включено или отключено с помощью свойства
enabled:
const rule = {
id: 'image-alt-required',
enabled: false,
context: 'img',
check: function(node) {
return { result: node.hasAttribute('alt') };
}
};
Даже зарегистрированное правило не будет выполняться при
enabled: false. Дополнительно, при вызове
axe.run можно передавать объект rules, чтобы
локально переопределить состояние конкретного правила:
axe.run(document, {
rules: {
'image-alt-required': { enabled: true }
}
});
Теги позволяют структурировать правила и группировать их по стандартам WCAG, уровню приоритета или по практическим рекомендациям. Примеры тегов:
wcag2a, wcag2aa,
wcag2aaabest-practiceexperimentalИспользование тегов упрощает фильтрацию и генерацию отчётов, а также интеграцию с CI/CD, когда требуется проверять только определённые категории доступности.
После регистрации правило автоматически интегрируется в стандартный процесс анализа:
axe.run(document).then(results => {
results.violations.forEach(v => {
console.log(`${v.id}: ${v.description}`);
});
});
Кастомные правила появляются в списке violations и
позволяют детально отслеживать нарушения, специфичные для проекта,
включая нестандартные компоненты, собственные виджеты и динамически
создаваемые элементы.
check можно расширять дополнительными полями, такими
как any, all, none, для
комплексной логики проверки.id и
информативное help, чтобы его легко идентифицировать в
отчётах.Регистрация кастомных правил в Axe-core обеспечивает мощный инструмент для контроля доступности, позволяя адаптировать библиотеку под любые специфические требования проекта.