Keyboard navigation тестирование

Playwright предоставляет мощные возможности для тестирования веб-приложений, в том числе для проверки функциональности навигации с помощью клавиатуры. Этот аспект критически важен для обеспечения доступности и удобства использования веб-приложений для людей с ограниченными возможностями. Навигация с клавиатуры включает в себя использование клавиш, таких как Tab, Shift + Tab, Enter, Arrow keys и других, для перемещения между элементами на странице.

Основные принципы тестирования с клавиатуры

При тестировании с клавиатуры важно имитировать поведение реальных пользователей, которые используют только клавиши для навигации по интерфейсу. Это позволяет выявить проблемы с доступностью, такие как:

  • Невозможность перемещения между важными элементами на странице.
  • Отсутствие фокуса на интерактивных элементах.
  • Неверное поведение клавиш навигации.
  • Проблемы с порядком фокуса.

Playwright предоставляет разнообразные методы и возможности для реализации этих тестов, включая работу с фокусом, имитацию нажатия клавиш и проверку видимости элементов.

Инициализация и основные команды

Playwright предоставляет API для эмуляции действий пользователя, включая нажатия клавиш и перемещения по элементам с помощью клавиатуры. Для начала работы с Playwright необходимо настроить проект и импортировать нужные модули:

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
})();

Навигация с использованием клавиши Tab

Один из основных способов перемещения по странице — это использование клавиши Tab. Для имитации нажатия Tab в Playwright используется метод page.keyboard.press().

await page.keyboard.press('Tab');

Этот код имитирует нажатие клавиши Tab, что позволяет переместиться на следующий интерактивный элемент на странице. Для выполнения теста, где необходимо пройти через все доступные элементы, можно использовать цикл:

for (let i = 0; i < 5; i++) {
  await page.keyboard.press('Tab');
  await page.waitForTimeout(100);  // Пауза для ожидания реакции UI
}

Проверка фокуса

После того как пользователь переместился по элементам с помощью клавиши Tab, важно убедиться, что фокус был правильно перемещен на нужный элемент. Для этого Playwright предоставляет возможность проверки фокуса через page.$(':focus'), что позволяет проверить текущий фокус на странице:

const focusedElement = await page.$(':focus');
const focusedElementTag = await focusedElement.evaluate(el => el.tagName);
console.log(focusedElementTag);  // Выведет тип тега текущего фокусируемого элемента

Этот код позволит проверить, что фокус находится на правильном элементе после нажатия Tab.

Навигация назад с помощью Shift + Tab

Для перемещения по элементам в обратном порядке используется сочетание клавиш Shift + Tab. Для тестирования навигации назад в Playwright можно также использовать метод page.keyboard.press():

await page.keyboard.press('Shift+Tab');

Этот метод имитирует нажатие Shift + Tab и позволяет вернуться к предыдущему элементу на странице. В тестах это полезно для проверки, что навигация работает в обоих направлениях.

Тестирование ввода данных с клавиатуры

После того как фокус установлен на нужном элементе, следующим шагом является тестирование ввода данных. Для этого Playwright предоставляет метод page.keyboard.type().

await page.keyboard.type('Test input');

Этот метод эмулирует набор текста в выбранное текстовое поле. Его можно использовать для тестирования форм, полей ввода и любых других элементов, принимающих текст.

Навигация с помощью стрелок

Некоторые интерфейсы, например, выпадающие списки или карусели, требуют навигации с помощью стрелок. В Playwright можно эмулировать нажатия стрелок с помощью метода page.keyboard.press():

await page.keyboard.press('ArrowDown');  // Переход к следующему элементу в списке
await page.keyboard.press('ArrowUp');    // Переход к предыдущему элементу

Этот подход позволяет тестировать взаимодействие с элементами, где движение через интерфейс требует клавиш стрелок, например, при навигации по выпадающим спискам или галереям.

Пример полного теста навигации с клавиатуры

Рассмотрим пример теста, который проверяет, что можно перемещаться между полями формы с помощью клавиатуры и вводить данные:

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com/form');

  // Навигация через поля формы с использованием Tab
  await page.keyboard.press('Tab');
  await page.waitForTimeout(100); // Небольшая пауза для удобства

  // Проверка, что фокус находится на первом поле
  const focusedElement = await page.$(':focus');
  const focusedElementTag = await focusedElement.evaluate(el => el.tagName);
  if (focusedElementTag === 'INPUT') {
    console.log('Фокус на первом поле');
  }

  // Ввод данных в поле
  await page.keyboard.type('John Doe');
  await page.keyboard.press('Tab');
  await page.keyboard.type('john.doe@example.com');

  // Завершение теста
  await browser.close();
})();

Этот тест проверяет, что фокус переходит на элементы формы при нажатии Tab и что данные вводятся корректно.

Работа с модальными окнами и всплывающими окнами

Модальные окна и всплывающие окна требуют особого внимания при тестировании навигации с клавиатуры. Важно убедиться, что после появления модального окна фокус перемещается внутрь этого окна и не выходит за его пределы.

Для имитации таких действий можно использовать Playwright для проверки видимости модального окна и переключения фокуса:

// Ожидание появления модального окна
const modal = await page.waitForSelector('.modal');

// Проверка, что фокус внутри модального окна
await page.keyboard.press('Tab');
const modalFocusedElement = await modal.$(':focus');
const modalFocusedTag = await modalFocusedElement.evaluate(el => el.tagName);
console.log(modalFocusedTag);  // Должно вернуть тег элемента внутри модального окна

Этот код помогает проверить, что фокус не уходит за пределы модального окна.

Проблемы доступности и их проверка

Одной из целей тестирования навигации с клавиатуры является проверка доступности веб-приложений. Важно, чтобы все важные элементы были доступны через клавиатуру и что последовательность фокуса была логичной и удобной. Для этого можно использовать различные методы Playwright для имитации действий и проверки видимости элементов.

Дополнительно, можно использовать библиотеку axe-core для проверки доступности и интегрировать её с Playwright:

const axe = require('axe-core');
const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');

  const results = await page.evaluate(() => axe.run());
  console.log(results.violations);  // Вывод всех нарушений доступности
})();

Этот подход позволяет выявить проблемы с доступностью, которые могут возникнуть в процессе навигации с клавиатуры.

Заключение

Тестирование навигации с клавиатуры является важной частью обеспечения доступности и удобства использования веб-приложений. Playwright предоставляет мощные инструменты для имитации действий с клавиатурой, таких как перемещение по элементам с помощью Tab, Shift + Tab, стрелок и ввода данных. Использование этих методов помогает обнаружить проблемы с навигацией и фокусом, а также улучшить доступность интерфейса для пользователей с ограниченными возможностями.