Автоматизированное тестирование доступности веб-приложений с помощью Puppeteer становится всё более востребованным для обеспечения поддержки пользователей с нарушениями зрения. Puppeteer предоставляет возможности управления браузером на уровне DOM и пользовательских событий, что позволяет имитировать работу реальных пользователей и проверять совместимость сайта с экранными читалками (screen readers).
Для тестирования screen reader совместимости Puppeteer используется вместе с инструментами аудита доступности, такими как axe-core. Основная задача — получить информацию о том, насколько элементы страницы корректно интерпретируются assistive technologies.
Пример базовой настройки:
const puppeteer = require(&
const axeCore = require('axe-core');
(async () => {
const browser = await puppeteer.launch({ headless: false });
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();
})();
Ключевые моменты:
headless: false позволяет наблюдать работу
скринридера и поведение элементов.
axe-core дает возможность собирать детальные
отчёты о нарушениях доступности.
violations содержит список элементов, которые могут вызвать
проблемы для screen readers.
Screen readers сильно зависят от корректной семантики HTML. Puppeteer
позволяет получить доступ к атрибутам role,
aria-*, а также к тегам и их содержимому для проверки
соответствия стандартам ARIA.
Пример проверки атрибутов ARIA:
const ariaElements = await page.$$eval('[role]', elements =>
elements.map(el => ({
role: el.getAttribute('role'),
ariaLabel: el.getAttribute('aria-label'),
text: el.innerText
}))
);
console.table(ariaElements);
Рекомендации по семантике:
role=“button”,
role=“navigation” и др.).
alt).
h1–h6).
Screen readers часто комбинируются с клавиатурной навигацией. Puppeteer позволяет имитировать нажатия клавиш и перемещение фокуса по интерактивным элементам.
Пример теста клавиатурной навигации:
await page.focus('#first-button');
await page.keyboard.press('Tab'); // переход к следующему элементу
await page.keyboard.press('Enter'); // активация элемента
Важные аспекты:
Tab.
Enter и Space для кнопок и
ссылок.
Для интеграции настоящих screen readers Puppeteer взаимодействует с внешними инструментами: NVDA (Windows) и VoiceOver (macOS). Скринридеры могут считывать контент страницы в реальном времени, а Puppeteer позволяет анализировать DOM и отслеживать изменения.
Пример анализа текстовых обновлений:
await page.evaluate(() => {
const liveRegion = document.querySelector('#status');
const observer = new MutationObserver(mutations => {
mutations.forEach(mutation => console.log(mutation.target.innerText));
});
observer.observe(liveRegion, { childList: true });
});
Ключевые моменты:
MutationObserver позволяет отслеживать
динамически изменяемые области (aria-live).
Для комплексного контроля доступности формируются отчёты в формате JSON или HTML. Puppeteer позволяет автоматически сохранять результаты тестов и интегрировать их в CI/CD.
Пример генерации отчёта:
const fs = require('fs');
fs.writeFileSync('axe-report.json', JSON.stringify(results, null, 2));
Практические рекомендации:
aria-*.
axe-core на
каждом релизе.
Эти подходы обеспечивают глубокую проверку доступности веб-приложений и позволяют выявлять проблемы, которые могут быть незаметны при визуальном тестировании, гарантируя совместимость с screen readers.