Axe-core — это библиотека для автоматического анализа доступности веб-страниц. Она позволяет выявлять нарушения стандартов WCAG (Web Content Accessibility Guidelines) и интегрируется с различными инструментами тестирования, включая браузеры, фреймворки для юнит-тестирования и CI/CD-пайплайны. Основной подход библиотеки заключается в выполнении правил проверки DOM-структуры страницы и генерации подробного отчета о найденных проблемах.
Для использования Axe-core в проекте на JavaScript необходимо установить пакет:
npm install axe-core
Для браузерного окружения подключение можно выполнить через CDN:
<script src="https://cdnjs.cloudflare.com/ajax/libs/axe-core/5.3.2/axe.min.js"></script>
В Node.js можно использовать модуль напрямую:
const axe = require('axe-core');
После подключения библиотеки можно приступать к конфигурированию и запуску проверок.
Axe-core предоставляет гибкие механизмы настройки правил:
Включение или отключение правил:
const options = {
rules: {
'color-contrast': { enabled: false },
'image-alt': { enabled: true }
}
};Контекст проверки: позволяет ограничить область анализа определёнными элементами DOM:
const context = {
include: [['#main-content']],
exclude: [['.ads']]
};Уровень строгости: можно выбирать приоритетные нарушения (minor, moderate, serious, critical), что удобно при интеграции с автоматическими тестами.
Для браузерного окружения проверки выполняются следующим образом:
axe.run(document, options, (err, results) => {
if (err) throw err;
console.log(results.violations);
});
results.violations содержит массив объектов, каждый из
которых описывает нарушение: селекторы элементов, тип нарушения, уровень
серьезности и рекомендации по исправлению.
В Node.js проверка через Puppeteer или Playwright выглядит так:
const { chromium } = require('playwright');
const axeCore = require('axe-core');
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
await page.addScriptTag({ path: require.resolve('axe-core') });
const results = await page.evaluate(async () => {
return await axe.run();
});
console.log(results.violations);
await browser.close();
})();
Каждое нарушение в отчете содержит:
Тестирование отдельных компонентов Проверка
отдельных React-компонентов или Vue-компонентов перед интеграцией на
страницу помогает выявлять проблемы на ранних этапах разработки. Для
этого можно использовать axe-core совместно с
@testing-library/react или
@testing-library/vue:
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);
});Сквозное тестирование страниц Использование Puppeteer или Playwright позволяет проводить комплексную проверку всей страницы с динамическим контентом, модальными окнами и интерактивными элементами.
Интеграция в CI/CD Автоматическое выполнение проверок при каждом деплое или PR гарантирует постоянный контроль доступности. Скрипт CI может завершаться с ошибкой, если найдено критическое нарушение, что повышает качество продукта.
Фокус на критических правилах Для больших проектов полезно настраивать фильтрацию по уровню серьезности, чтобы сначала устранять критические и серьезные нарушения, оставляя minor- и moderate-проблемы для последующих итераций.
Axe-core обеспечивает глубокий контроль доступности веб-продукта, позволяя интегрировать проверки на всех уровнях разработки — от компонентов до сквозных пользовательских сценариев, с гибкой настройкой и подробными отчетами.