Playwright предоставляет разработчикам мощный инструмент для
тестирования веб-приложений, с возможностью эмулировать различные
состояния и предпочтения пользователя, включая настройки доступности.
Одной из таких возможностей является работа с медиа-запросами, в
частности с prefers-reduced-motion. Этот медиа-запрос
используется для определения предпочтений пользователя относительно
анимаций и движения на веб-странице.
prefers-reduced-motion:
что это?Медиа-запрос prefers-reduced-motion позволяет
веб-приложению реагировать на предпочтения пользователя, касающиеся
использования анимаций и переходов. С помощью этого параметра можно
определить, хочет ли пользователь минимизировать анимации или вообще
отключить их. Это особенно важно для людей с нарушениями восприятия или
тех, кто страдает от головных болей, вызванных чрезмерными
анимациями.
Медиа-запрос может принимать два значения:
reduce: Указывает на предпочтение пользователя к
уменьшению анимации.no-preference: Нет предпочтений, анимации могут
использоваться по умолчанию.Важность такого подхода заключается в создании доступных и удобных условий для пользователей с ограниченными возможностями.
prefers-reduced-motion в PlaywrightВ Playwright можно эмулировать предпочтения пользователя, чтобы
тестировать, как сайт реагирует на различные настройки в контексте
prefers-reduced-motion. Это делается с помощью настройки
устройства, что позволяет проверить, как интерфейс адаптируется к
условиям пользователей, которые предпочитают минимизацию анимаций.
Для эмуляции данного медиа-запроса в Playwright используется метод
context.overridePermissions, а также возможность
модификации контекста браузера, задавая предпочтения через настройку
CSS-меток.
Чтобы эмулировать предпочтение prefers-reduced-motion с
помощью Playwright, необходимо задать соответствующие параметры в
контексте браузера, используя API для настройки пользовательских
предпочтений. Пример кода, который задает контекст с уменьшенными
анимациями:
const { test, expect } = require('@playwright/test');
test('эмуляция prefers-reduced-motion', async ({ page }) => {
// Установка настройки для предпочитаемой минимизации анимаций
await page.context().addInitScript(() => {
Object.defineProperty(window, 'matchMedia', {
value: (query) => {
if (query === '(prefers-reduced-motion: reduce)') {
return { matches: true };
}
return window.matchMedia(query);
},
});
});
await page.goto('https://example.com');
// Проверка реакции сайта на уменьшение анимации
const animationElement = await page.$('.animation-element');
const animationStyle = await animationElement.evaluate(el => getComputedStyle(el).animation);
expect(animationStyle).toBe('none');
});
Этот пример показывает, как использовать метод
addInitScript для добавления JavaScript в контекст
страницы, который переопределяет поведение matchMedia и
заставляет браузер воспринимать запрос
prefers-reduced-motion как активированный.
Кроме prefers-reduced-motion, существует множество
других media features, которые могут быть полезны при тестировании
адаптивных интерфейсов. Некоторые из них:
prefers-color-scheme: Определяет
предпочтение пользователя по теме интерфейса (темная или светлая
тема).
light, dark,
no-preference.prefers-contrast: Предпочтения
пользователя по контрастности интерфейса (например, высокий
контраст).
high, low,
no-preference.device-width и
device-height: Определяют размеры экрана
устройства, что может быть полезно для тестирования на разных
устройствах.
orientation: Определяет ориентацию
экрана (портретная или альбомная).
portrait, landscape.В Playwright можно эмулировать все эти запросы, создавая разнообразные условия для тестирования. Пример эмуляции темы интерфейса:
test('эмуляция prefers-color-scheme', async ({ page }) => {
await page.context().addInitScript(() => {
Object.defineProperty(window, 'matchMedia', {
value: (query) => {
if (query === '(prefers-color-scheme: dark)') {
return { matches: true };
}
return window.matchMedia(query);
},
});
});
await page.goto('https://example.com');
const bodyBackground = await page.$eval('body', (body) => getComputedStyle(body).backgroundColor);
expect(bodyBackground).toBe('rgb(0, 0, 0)'); // Тёмная тема должна иметь тёмный фон
});
Работа с медиа-запросами в тестах позволяет глубже интегрировать
тестирование доступности в процесс разработки. Например, с помощью
эмуляции prefers-reduced-motion можно проверить,
отключаются ли анимации и переходы на веб-странице, что критично для
пользователей с определёнными медицинскими показаниями.
Эмуляция других media features также позволяет тестировать интерфейсы в различных условиях: от смены темы интерфейса до проверки работы интерфейса на мобильных устройствах с различной ориентацией и размером экрана.
Playwright предоставляет отличные возможности для тестирования
медиа-запросов и предпочтений пользователей, включая
prefers-reduced-motion. Использование этих функций
позволяет обеспечить доступность и адаптивность веб-приложений, создавая
лучшие условия для пользователей с особыми потребностями. С помощью
эмуляции различных настроек можно протестировать реакцию интерфейса на
изменения предпочтений и убедиться, что приложение отвечает требованиям
доступности.