Axe-core — это библиотека для автоматизированного тестирования доступности веб-приложений на JavaScript. Она позволяет выявлять нарушения стандартов доступности (WCAG) и интегрируется с различными инструментами тестирования, включая браузерные расширения, фреймворки тестирования и CI/CD-процессы. Основной принцип работы библиотеки заключается в сканировании DOM и применении набора правил для выявления потенциальных проблем.
Ключевыми преимуществами являются:
Для Node.js-проектов используется пакет axe-core.
Установка через npm:
npm install axe-core --save-dev
Для браузерного окружения можно подключать через CDN:
После подключения библиотека становится доступной глобально через
объект axe.
axe.run — главный метод для
сканирования страницы или DOM-узла. Возвращает объект с результатами
тестирования.
const results = await axe.run(document);
console.log(results.violations);
Ключевые свойства объекта results:
violations — массив найденных нарушений с детальными
описаниями.passes — элементы, которые успешно прошли
проверку.incomplete — проверки, результаты которых не удалось
определить однозначно.inapplicable — правила, которые не применимы к текущему
DOM.axe.configure — настройка правил,
включая отключение или изменение уровня важности. Пример:
axe.configure({
rules: [
{ id: 'color-contrast', enabled: false },
{ id: 'label', options: { selector: 'input, textarea' } }
]
});
project/
├─ src/
│ └─ components/
├─ tests/
│ └─ accessibility/
│ ├─ button.test.js
│ ├─ form.test.js
│ └─ modal.test.js
└─ package.json
axe.run на контейнере компонента, после чего проверяется
наличие нарушений:import { render } from '@testing-library/react';
import axe from 'axe-core';
import Button from '../. ./src/components/Button';
test('Button должен соответствовать требованиям доступности', async () => {
const { container } = render();
const results = await axe.run(container);
expect(results.violations).toHaveLength(0);
});
{
"scripts": {
"test:axe": "node tests/accessibility/runAxeTests.js"
}
}
Конфигурация правил Правила доступны в документации Axe-core. Возможна настройка на уровне проекта или конкретного теста, включая:
Объект violations имеет следующую структуру:
[
{
"id": "color-contrast",
"impact": "serious",
"description": "Недостаточный контраст текста",
"nodes": [
{
"html": "",
"target": ["button"],
"failureSummary": "Контраст текста и фона менее 4.5:1"
}
]
}
]
Эта структура позволяет:
impact.target.