Интеграция Playwright с axe-core позволяет автоматизировать процесс проверки доступности веб-приложений. Axe-core — это библиотека, которая помогает проводить анализ доступности на уровне контента веб-страниц. Это средство предоставляет доступ к методам для выявления ошибок доступности и помогает улучшать опыт пользователей с ограниченными возможностями.
Для начала необходимо установить axe-core и Playwright. Если Playwright уже установлен, добавление axe-core будет простым шагом:
npm install axe-core
Затем, в тестах Playwright, необходимо импортировать библиотеку и интегрировать её с инструментами тестирования. Для этого создаётся экземпляр axe-core, который будет проверять страницу на доступность.
const { chromium } = require('playwright');
const axeCore = require('axe-core');
После этого можно запускать тесты, используя методы Playwright для взаимодействия с элементами страницы и axe-core для выполнения проверки доступности.
Для выполнения проверки доступности страницы с использованием
axe-core, необходимо передать скрипт, который будет вызываться в
контексте браузера. В Playwright можно использовать метод
page.evaluate(), который позволяет выполнять код в
браузере.
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');
const results = await page.evaluate(() => {
return new Promise((resolve) => {
// Запускаем axe-core на странице
axe.run((err, results) => {
if (err) {
resolve({ error: err });
}
resolve(results);
});
});
});
console.log(results); // Выводим результаты теста
await browser.close();
})();
В этом примере создаётся браузерный экземпляр с помощью Playwright, который загружает страницу, а затем выполняется анализ с помощью axe-core. Важно помнить, что результаты тестирования включают все ошибки доступности, которые были найдены на странице.
Результаты анализа доступности представляют собой объект с несколькими ключами, важнейшими из которых являются:
Пример структуры результата:
{
"violations": [
{
"id": "color-contrast",
"impact": "serious",
"description": "The color contrast between the text and background is insufficient.",
"nodes": [
{
"target": ["#header h1"],
"failureSummary": "This text has insufficient color contrast against the background."
}
]
}
],
"passes": [],
"incomplete": []
}
Каждое нарушение содержит:
После того как тестирование завершено, важно не только вывести результаты в консоль, но и обработать их для дальнейших действий. Например, можно настроить систему уведомлений или создать отчёт в виде файла.
Пример обработки нарушений:
const { chromium } = require('playwright');
const axeCore = require('axe-core');
const fs = require('fs');
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
const results = await page.evaluate(() => {
return new Promise((resolve) => {
axe.run((err, results) => {
if (err) {
resolve({ error: err });
}
resolve(results);
});
});
});
if (results.violations.length > 0) {
fs.writeFileSync('axe-violations.json', JSON.stringify(results, null, 2));
}
await browser.close();
})();
В данном примере результаты нарушений записываются в файл
axe-violations.json. Это полезно для дальнейшего анализа
или автоматизированных проверок.
Интеграция с фреймворками тестирования, такими как Jest или Mocha, позволяет автоматизировать проверку доступности как часть общего процесса тестирования веб-приложений. Включение axe-core в тесты помогает поддерживать стандарт доступности в ходе разработки, автоматически выявляя проблемы ещё на ранних этапах.
Пример интеграции с Jest:
const { chromium } = require('playwright');
const axeCore = require('axe-core');
describe('A11y Tests', () => {
let browser;
let page;
beforeAll(async () => {
browser = await chromium.launch();
page = await browser.newPage();
});
afterAll(async () => {
await browser.close();
});
it('should not have accessibility violations', async () => {
await page.goto('https://example.com');
const results = await page.evaluate(() => {
return new Promise((resolve) => {
axe.run((err, results) => {
if (err) {
resolve({ error: err });
}
resolve(results);
});
});
});
expect(results.violations.length).toBe(0);
});
});
Этот пример с использованием Jest гарантирует, что на странице не будет найдено нарушений доступности. Если такие нарушения будут, тест не пройдет, и разработчики получат информацию о проблемах с доступностью.
B axe-core имеется возможность настраивать проверки с помощью
конфигурации. Это может быть полезно, если требуется учитывать
специфические требования или исключить определённые правила. Для
настройки axe-core необходимо передать объект с параметрами конфигурации
в метод axe.run().
Пример настройки axe-core:
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');
const results = await page.evaluate(() => {
return new Promise((resolve) => {
axe.run({
runOnly: ['wcag2a', 'wcag2aa'], // Ограничиваем проверки WCAG 2.0
rules: {
'color-contrast': { enabled: false } // Отключаем проверку контраста
}
}, (err, results) => {
if (err) {
resolve({ error: err });
}
resolve(results);
});
});
});
console.log(results);
await browser.close();
})();
В данном примере ограничены только правила WCAG 2.0 уровня A и AA, а проверка контраста отключена.
Интеграция Playwright с axe-core — это мощный инструмент для создания доступных веб-приложений, что важно для обеспечения равного доступа всех пользователей, независимо от их физических возможностей.