Axe-core — это библиотека для автоматизированного тестирования доступности веб-приложений, разработанная для интеграции с JavaScript. Она предоставляет мощный и гибкий инструмент для проверки соответствия интерфейсов стандартам доступности, таким как WCAG 2.1 и ARIA. Библиотека ориентирована на разработчиков и тестировщиков, позволяя выявлять ошибки доступности на ранних этапах разработки.
Axe-core может работать как в браузере, так и в среде Node.js. Основные способы интеграции:
Пример использования в Node.js:
const { AxePuppeteer } = require('axe-puppeteer');
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
const results = await new AxePuppeteer(page).analyze();
console.log(results.violations);
await browser.close();
})();
В этом примере Axe-core анализирует веб-страницу и возвращает список нарушений доступности с подробной информацией о каждом.
Axe-core выполняет комплексный анализ элементов страницы, проверяя их на соответствие ключевым критериям доступности:
Каждое нарушение классифицируется по уровню серьёзности:
critical, serious, moderate,
minor, что позволяет приоритизировать исправления.
Axe-core позволяет настраивать набор проверок под конкретные нужды проекта. Например, можно отключить определённые правила или ограничить анализ определёнными элементами страницы:
const results = await new AxePuppeteer(page)
.withRules(['color-contrast', 'label'])
.analyze();
Также поддерживается динамическая фильтрация результатов по уровню серьёзности:
const criticalViolations = results.violations.filter(v => v.impact === 'critical');
Это облегчает интеграцию с CI/CD, позволяя фиксировать только наиболее значимые проблемы.
Axe-core совместима с React, Angular, Vue и другими библиотеками. Для
React существует пакет @axe-core/react, который позволяет
подключать инструмент к компонентам и получать предупреждения в консоли
разработки при нарушении доступности. Это обеспечивает реальное
время контроля качества интерфейса, не дожидаясь финального
тестирования.
Пример для React:
import React from 'react';
import ReactDOM from 'react-dom';
import axe from '@axe-core/react';
import App from './App';
if (process.env.NODE_ENV !== 'production') {
axe(React, ReactDOM, 1000);
}
ReactDOM.render(<App />, document.getElementById('root'));
Комбинация Axe-core с Jest или Cypress позволяет интегрировать проверки доступности в автоматические тесты. Это гарантирует, что каждая сборка проходит проверку доступности без дополнительных усилий со стороны разработчиков.
Пример интеграции с Cypress:
describe('Accessibility checks', () => {
it('Has no detectable accessibility violations on load', () => {
cy.visit('https://example.com');
cy.injectAxe();
cy.checkA11y();
});
});
Axe-core позволяет превратить доступность из разового этапа тестирования в непрерывный процесс контроля качества, делая интерфейсы более дружелюбными и соответствующими современным требованиям веб-разработки.