Axe-core — это библиотека для автоматизированного тестирования доступности веб-приложений. Она предоставляет API для анализа DOM и выявления проблем с доступностью, соответствующих стандартам WCAG (Web Content Accessibility Guidelines). В JavaScript Axe-core можно интегрировать напрямую в браузер или использовать в Node.js-среде.
Axe-core доступна как npm-пакет. Для подключения достаточно установить пакет и импортировать его:
import axe from 'axe-core';
// или через require
const axe = require('axe-core');
Инициализация библиотеки предполагает, что DOM уже загружен. Для
веб-приложений обычно используется событие
DOMContentLoaded:
document.addEventListener('DOMContentLoaded', () => {
axe.run(document, {}, (err, results) => {
if (err) throw err;
console.log(results.violations);
});
});
axe.run(context, options, callback)
Запускает анализ доступности на указанном контексте (например,
document или конкретный элемент).
context — элемент DOM или CSS-селектор.options — объект настроек (например, исключение
некоторых правил).callback — функция обратного вызова, принимающая ошибки
и результаты проверки.axe.configure(config) Позволяет
глобально изменить настройки библиотеки. Используется для отключения
правил или изменения их приоритетов:
axe.configure({
rules: [
{ id: 'color-contrast', enabled: false }, // отключение проверки контраста
{ id: 'image-alt', enabled: true } // включение проверки альтернативного текста
]
});
Метод axe.run возвращает объект с несколькими
ключами:
violations — массив объектов с найденными
нарушениями. Каждый объект содержит:
id — идентификатор правила.impact — степень важности (minor, moderate, serious,
critical).description — описание проблемы.nodes — элементы DOM, на которых обнаружена
ошибка.passes — массив проверок, пройденных
успешно.
incomplete — проверки, которые не удалось
завершить.
inapplicable — правила, не применимые к текущему
DOM.
Пример обработки результатов:
axe.run(document, {}, (err, results) => {
if (err) {
console.error('Ошибка при анализе доступности:', err);
return;
}
results.violations.forEach(violation => {
console.log(`Нарушение: ${violation.id}`);
console.log(`Степень важности: ${violation.impact}`);
violation.nodes.forEach(node => {
console.log('Элемент:', node.html);
console.log('Описание:', node.failureSummary);
});
});
});
Для React, Vue или Angular Axe-core можно интегрировать как в браузерные тесты, так и в среду Node.js:
react-axe, который
автоматически подключает Axe-core при разработке.puppeteer или
playwright для анализа страниц на сервере:const puppeteer = require('puppeteer');
const axeCore = require('axe-core');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('http://localhost:3000');
const results = await page.evaluate(async () => {
return await axe.run(document);
});
console.log(results.violations);
await browser.close();
})();
Axe-core позволяет точно управлять проверками:
axe.run(document.querySelector('#main-content'));
axe.run(document, {
rules: {
'color-contrast': { enabled: false },
'label': { enabled: true }
}
});
axe.run(document, {
runOnly: {
type: 'tag',
values: ['wcag2a', 'wcag2aa']
}
});
Для интеграции Axe-core в автоматические тесты используется Node.js-среда. Результаты проверок можно сохранять в JSON и анализировать в пайплайнах CI/CD. Это позволяет автоматически выявлять регрессии доступности при обновлении фронтенда.
const fs = require('fs');
axe.run(document, {}, (err, results) => {
if (err) throw err;
fs.writeFileSync('axe-results.json', JSON.stringify(results, null, 2));
});
runOnly) для ускорения
анализа.axe.run на отдельных компонентах перед интеграцией в
страницу.Axe-core обеспечивает мощный инструмент для поддержания стандартов доступности, интегрируясь с любыми современными JavaScript-приложениями, от простых страниц до сложных SPA и серверных рендеринговых решений.