Screen reader совместимость — критически важный аспект доступности веб-приложений. Она обеспечивает возможность взаимодействия с сайтом людям с нарушениями зрения, используя специальные программы для озвучивания контента. Cypress позволяет автоматизировать проверку некоторых аспектов доступности и корректности работы с screen reader, хотя полная эмуляция работы таких программ невозможна напрямую.
ARIA (Accessible Rich Internet Applications) — набор атрибутов, расширяющих стандартные HTML-элементы для улучшения совместимости с assistive-технологиями. Ключевые моменты, на которые стоит обращать внимание:
role — определяет семантическую роль элемента
(например, button, dialog,
alert).aria-label и aria-labelledby — задают
текстовое описание элементов, недоступное визуально.aria-hidden — скрывает элементы от screen reader.Пример Cypress-теста для проверки наличия атрибутов:
describe('Проверка ARIA-атрибутов', () => {
it('Элементы с кнопками имеют корректные роли и описания', () => {
cy.get('button').each(($el) => {
cy.wrap($el)
.should('have.attr', 'role', 'button')
.and('have.attr', 'aria-label')
})
})
})
Важность проверки ARIA заключается в том, что screen reader полностью полагается на эти атрибуты для озвучивания интерфейса. Ошибки в них могут сделать элементы недоступными.
Screen reader тесно связан с фокусом клавиатуры,
поэтому проверка навигации через tab-клавишу — необходимый
элемент тестирования. Cypress позволяет эмулировать навигацию с
клавиатуры и проверять, какие элементы получают фокус.
Пример:
describe('Навигация по клавиатуре', () => {
it('Фокус перемещается по интерактивным элементам', () => {
cy.visit('/form')
cy.get('body').tab()
cy.focused().should('have.attr', 'id', 'first-input')
cy.focused().tab()
cy.focused().should('have.attr', 'id', 'submit-button')
})
})
Использование плагинов, таких как cypress-plugin-tab,
позволяет удобно управлять последовательностью фокусировки и проверять
корректность переходов между интерактивными элементами.
Screen reader взаимодействует с динамическим контентом через
Live Regions (aria-live). Для корректного
озвучивания изменений важно, чтобы новые сообщения или уведомления были
доступны для assistive-технологий.
Пример проверки live-region:
describe('Live-region тест', () => {
it('Сообщения в уведомлениях озвучиваются корректно', () => {
cy.get('#notification').should('have.attr', 'aria-live', 'polite')
cy.get('#trigger-notification').click()
cy.get('#notification').should('contain.text', 'Данные успешно сохранены')
})
})
aria-live="polite" сообщает screen reader, что контент
можно озвучивать, не прерывая пользователя. Cypress здесь проверяет
наличие текста и правильность атрибутов, что является ключевым моментом
доступности.
Для расширенной проверки доступности часто используют
axe-core, интегрируемый с Cypress через
cypress-axe. Он позволяет выявлять ошибки, связанные с
ARIA, контрастом текста, навигацией и другими аспектами доступности.
Пример интеграции:
import 'cypress-axe'
describe('Доступность с axe-core', () => {
it('Страница соответствует стандартам accessibility', () => {
cy.visit('/')
cy.injectAxe()
cy.checkA11y(null, {
runOnly: {
type: 'tag',
values: ['wcag2a', 'wcag2aa']
}
})
})
})
Это обеспечивает автоматическую проверку сотен правил WCAG и помогает выявить потенциальные проблемы, влияющие на работу screen reader.
Использование Cypress совместно с ARIA-атрибутами, эмуляцией фокуса и axe-core позволяет создать надёжный процесс тестирования доступности, обеспечивая корректную работу screen reader на всех критически важных страницах веб-приложения.