Axe-core — это мощная библиотека для автоматизированного тестирования доступности веб-приложений. Она позволяет выявлять нарушения стандартов WCAG и ARIA, обеспечивая высокое качество интерфейсов для всех пользователей. В JavaScript библиотека используется как в браузере, так и в Node.js, что делает её гибким инструментом для интеграции в CI/CD-процессы.
Для работы с Axe-core в проекте на JavaScript используется пакет
axe-core. Установка через npm или yarn:
npm install axe-core
yarn add axe-core
Подключение в браузере может происходить через импорт модуля:
import axe from 'axe-core';
Для Node.js можно использовать глобальный объект
require:
const axe = require('axe-core');
После подключения необходимо инициализировать Axe для конкретного DOM-дерева. Например:
axe.run(document, {}, (err, results) => {
if (err) throw err;
console.log(results);
});
Метод axe.run возвращает объект с ключевыми
разделами:
Каждое нарушение включает:
minor,
moderate, serious, critical.Пример вывода:
{
"violations": [
{
"id": "color-contrast",
"impact": "serious",
"description": "Недостаточная контрастность текста",
"nodes": [
{
"html": "<span style='color:#777'>Текст</span>",
"target": ["#text1"]
}
]
}
]
}
Для обеспечения строгого соответствия стандартам WCAG можно реализовать блокировку запуска функционала при выявленных нарушениях. Основная логика заключается в проверке результатов Axe перед выполнением критичных операций:
async function runAccessibilityCheck() {
return new Promise((resolve, reject) => {
axe.run(document, {}, (err, results) => {
if (err) return reject(err);
if (results.violations.length > 0) {
reject(new Error('Обнаружены нарушения доступности'));
} else {
resolve('Все проверки пройдены');
}
});
});
}
runAccessibilityCheck()
.then(message => {
console.log(message);
// выполнение дальнейших действий
})
.catch(error => {
console.error(error.message);
// блокировка функционала или уведомление команды
});
Важным моментом является категоризация нарушений по уровню
влияния. Можно настроить блокировку только для
serious и critical:
const criticalViolations = results.violations.filter(v =>
v.impact === 'serious' || v.impact === 'critical'
);
if (criticalViolations.length > 0) {
throw new Error('Критические нарушения доступности обнаружены');
}
Для автоматизации проверки доступности в процессе CI/CD библиотека Axe-core часто интегрируется с Jest или Cypress.
Пример для Jest:
import 'axe-core/axe.min.js';
test('доступность страницы', async () => {
const results = await new Promise((resolve, reject) => {
axe.run(document, {}, (err, res) => err ? reject(err) : resolve(res));
});
expect(results.violations.length).toBe(0);
});
Пример для Cypress:
import 'cypress-axe';
cy.visit('/home');
cy.injectAxe();
cy.checkA11y(null, {
includedImpacts: ['serious', 'critical']
});
Такая интеграция позволяет не только выявлять нарушения на раннем этапе разработки, но и останавливать процесс сборки при критических ошибках, что обеспечивает постоянное соответствие стандартам.
Axe-core предоставляет возможность конфигурировать набор правил, которые будут проверяться. Например, можно отключить проверку конкретных элементов:
const options = {
rules: {
'color-contrast': { enabled: true },
'label': { enabled: false } // отключение проверки
}
};
axe.run(document, options, (err, results) => {
console.log(results.violations);
});
Также возможна создание кастомных правил, что полезно для специфичных интерфейсных компонентов. Каждое правило описывается через селекторы, проверку и сообщение об ошибке.
Проверка большого DOM может занимать значительное время. Для оптимизации:
axe.run(document.querySelector('#main-content'), {}, callback);
Эти методы позволяют превратить Axe-core из инструмента для анализа в механизм предотвращения внедрения недоступного функционала, обеспечивая соблюдение стандартов WCAG на всех этапах разработки.