Axe-core — это JavaScript-библиотека для автоматизированного тестирования доступности веб-приложений. Она позволяет проверять HTML-код, стили и интерактивные элементы на соответствие стандартам доступности, таким как WCAG 2.1 и ARIA. Библиотека используется как в браузере, так и в Node.js, а также интегрируется с различными фреймворками и инструментами тестирования.
Основная архитектура Axe-core строится вокруг правил (rules), которые описывают конкретные проверки элементов DOM. Каждое правило имеет уникальный идентификатор, категорию и подробное объяснение, почему нарушение доступности считается проблемой. Библиотека поддерживает настройку правил: можно отключать проверку определённых правил, добавлять свои или изменять существующие.
Для работы в браузере Axe-core можно подключить через CDN:
<script src="https://cdnjs.cloudflare.com/ajax/libs/axe-core/4.6.3/axe.min.js"></script>
Для Node.js используется установка через npm:
npm install axe-core
После подключения инициализация тестирования выполняется вызовом
метода axe.run на корневом элементе DOM:
axe.run(document, {}, (err, results) => {
if (err) throw err;
console.log(results.violations);
});
Ключевые параметры метода axe.run:
Результат работы Axe-core представляет собой объект с несколькими ключами:
violations — массив обнаруженных нарушений
доступности. Каждый элемент включает:
id — уникальный идентификатор правила;impact — уровень серьёзности (critical,
serious, moderate, minor);description — объяснение проблемы;help и helpUrl — рекомендации по
исправлению и ссылка на документацию;nodes — элементы DOM, на которых обнаружено
нарушение.passes — элементы, прошедшие проверку.
incomplete — проверки, которые не были
завершены.
inapplicable — правила, неприменимые к текущему
контексту.
Пример работы с результатами:
axe.run(document).then(results => {
results.violations.forEach(v => {
console.log(`${v.id}: ${v.impact}`);
v.nodes.forEach(node => console.log(node.html));
});
});
Axe-core предоставляет гибкую систему настройки:
axe.run(document, {
rules: {
'color-contrast': { enabled: false },
'image-alt': { enabled: true }
}
});
exclude можно исключить определённые селекторы из
проверки:axe.run(document, {
exclude: [['.ad-banner', '#cookie-consent']]
});
axe.registerRule:axe.registerRule({
id: 'custom-heading',
selector: 'h1',
evaluate: node => node.textContent.length > 10,
message: 'Заголовок должен содержать не менее 10 символов'
});
Для автоматизации в React, Angular или Vue можно использовать Axe-core совместно с Jest или Cypress.
Пример с Jest и Testing Library:
import { render } from '@testing-library/react';
import axe from 'axe-core';
import MyComponent from './MyComponent';
test('доступность компонента', async () => {
const { container } = render(<MyComponent />);
const results = await axe.run(container);
expect(results.violations).toHaveLength(0);
});
Пример с Cypress:
cy.visit('/my-page');
cy.injectAxe();
cy.checkA11y();
Axe-core автоматически собирает все элементы страницы и проверяет их на соответствие стандартам доступности, выводя подробные отчёты.
Результаты проверки Axe-core содержат текстовые сообщения на
английском языке (help, description,
impact). Для русскоязычных приложений важно
локализовать эти сообщения.
const translations = {
'color-contrast': 'Контраст текста недостаточен',
'image-alt': 'Отсутствует альтернативный текст для изображения',
'critical': 'Критическая ошибка',
'serious': 'Серьёзная ошибка'
};
function translateResults(results, dict) {
return results.violations.map(v => ({
...v,
description: dict[v.id] || v.description,
impact: dict[v.impact] || v.impact
}));
}
axe.run(document).then(results => {
const translated = translateResults(results, translations);
translated.forEach(v => console.log(`${v.impact}: ${v.description}`));
});
Особенности перевода:
impact помогает быстрее оценивать серьёзность
проблемы.description и help делает отчёты
понятными для команды разработчиков.Результаты можно выводить в виде таблицы или визуальных карточек:
function renderViolations(violations) {
violations.forEach(v => {
const container = document.createElement('div');
container.innerHTML = `<strong>${v.impact}</strong>: ${v.description}`;
document.body.appendChild(container);
});
}
Это позволяет интегрировать Axe-core в административные панели, CI/CD отчёты и инструменты контроля качества доступности.
exclude для рекламы и виджетов, которые не
влияют на доступность основной функциональности.Axe-core сочетает в себе мощный движок правил, гибкую настройку и фильтрацию проверок, а также возможность локализации сообщений, что делает её универсальным инструментом для обеспечения доступности веб-приложений на профессиональном уровне.