Библиотека Axe-core предоставляет мощный механизм для автоматизированного аудита доступности веб-приложений. Помимо встроенных правил, она поддерживает создание кастомных проверок (custom checks), которые позволяют разработчику добавлять собственные критерии доступности, специфичные для проекта. Кастомные checks реализуются через API Axe-core, включая регистрацию новых правил, определение селекторов и написание функции проверки.
Каждый кастомный check в Axe-core состоит из нескольких ключевых компонентов:
critical, serious,
moderate или minor.Пример минимальной структуры кастомного check:
axe.core.registerCheck({
id: 'custom-heading-check',
description: 'Проверка наличия хотя бы одного <h1> на странице',
selector: 'h1',
evaluate: (node) => {
return node ? { passed: true } : { passed: false, message: 'На странице отсутствует <h1>' };
},
impact: 'serious'
});
Селекторы могут быть строковыми CSS-селекторами или функциями. Строковые селекторы удобны для простых проверок:
selector: 'button[aria-label]'
Функции-селекторы дают полный контроль:
selector: (root) => {
return Array.from(root.querySelectorAll('img')).filter(img => !img.hasAttribute('alt'));
}
Использование функции позволяет динамически фильтровать элементы по сложным условиям, например, проверять родительские элементы, классы или атрибуты, которые недоступны через обычные селекторы.
Функция проверки должна возвращать объект с ключами:
passed — true, если элемент прошел
проверку, false в противном случае.message — строка с описанием нарушения (необязательный,
но рекомендуется).helpUrl — URL к документации или внутренним
рекомендациям (опционально).Пример проверки для всех изображений с отсутствующим атрибутом
alt:
axe.core.registerCheck({
id: 'img-alt-check',
description: 'Все изображения должны иметь атрибут alt',
selector: 'img',
evaluate: (node) => {
if (!node.hasAttribute('alt') || node.getAttribute('alt').trim() === '') {
return { passed: false, message: 'Изображение не имеет описательного alt' };
}
return { passed: true };
},
impact: 'critical'
});
После регистрации кастомного check он автоматически включается в сканирование Axe-core. Пример использования с Node.js и браузерной средой:
const { AxePuppeteer } = require('axe-puppeteer');
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
const results = await new AxePuppeteer(page).analyze();
console.log(results.violations);
await browser.close();
})();
Все кастомные проверки, зарегистрированные через
axe.core.registerCheck, автоматически добавляются в объект
results.violations.
Кастомные checks в Axe-core поддерживают уровни влияния, аналогичные встроенным правилам:
Присвоение правильного уровня критичности важно для формирования приоритетов исправления ошибок.
Axe-core позволяет включать или исключать кастомные проверки через конфигурационные объекты:
const config = {
rules: {
'img-alt-check': { enabled: true },
'custom-heading-check': { enabled: false }
}
};
axe.run(document, config).then(results => {
console.log(results.violations);
});
Это позволяет selectively активировать checks в разных средах или для различных страниц.
Кастомные checks Axe-core предоставляют гибкость и позволяют адаптировать автоматическую проверку доступности под конкретные требования проекта, обеспечивая более глубокий контроль за качеством интерфейса.