WebdriverIO предоставляет мощный инструмент для управления браузером и взаимодействия с веб-приложениями на уровне пользовательского интерфейса. Одной из важных возможностей является работа с комбинациями клавиш и имитацией действий пользователя через клавиатуру. Это позволяет автоматизировать сценарии, которые требуют не просто кликов, а комплексного взаимодействия с элементами страницы.
WebdriverIO использует объект browser для управления
сессией и объект Keys для работы с специальными клавишами.
Ключевые моменты:
keys() позволяет отправлять
нажатия клавиш в текущую активную область браузера.Control,
Shift, Alt, Meta (Command на
Mac).Пример отправки простой клавиши:
await browser.keys('Enter');
Для комбинаций с модификаторами используется массив:
await browser.keys(['Control', 'a']); // Выделить весь текст
await browser.keys('Control'); // Нажать Control
await browser.keys('a'); // Нажать 'a'
await browser.keys('NULL'); // Отпустить Control
Метод 'NULL' освобождает все удерживаемые
модификаторы.
Для полей ввода важно правильно комбинировать обычные символы и специальные клавиши:
const input = await $('#username');
await input.setValue('admin'); // Ввод текста напрямую
await input.addValue(['Tab', 'password123']); // Перемещение на следующее поле и ввод
setValue очищает поле перед вводом.addValue добавляет текст к существующему
содержимому.WebdriverIO позволяет имитировать действия браузера, такие как прокрутка, обновление или закрытие вкладок:
await browser.keys(['Control', 't']); // Открыть новую вкладку
await browser.keys(['Control', 'w']); // Закрыть текущую вкладку
await browser.keys(['Control', 'r']); // Перезагрузить страницу
await browser.keys(['ArrowDown']); // Прокрутка вниз
await browser.keys(['PageUp']); // Прокрутка вверх
Для Mac клавиша Meta используется вместо
Control.
Комбинации с несколькими модификаторами обрабатываются через массив:
await browser.keys(['Control', 'Shift', 'n']); // Новое окно в режиме инкогнито
await browser.keys('NULL'); // Сброс модификаторов
Важно всегда использовать 'NULL', иначе WebdriverIO
будет считать модификаторы удерживаемыми и возможны непредсказуемые
результаты.
Иногда требуется вводить сложные последовательности, включая задержки или циклические действия:
const sequence = ['a', 'b', 'c', 'Backspace', 'd'];
for (const key of sequence) {
await browser.keys(key);
}
Такой подход позволяет эмулировать точное поведение пользователя, включая исправление ошибок, прокрутку текста или редактирование формы.
Alt+Tab не может быть перехвачена
браузером для переключения окон.F1-F12, Home,
End) могут вести себя по-разному в Chrome, Firefox и
Edge.Метод keys() можно комбинировать с выборкой элементов
через $ и $$:
const inputField = await $('#search');
await inputField.click();
await browser.keys(['Control', 'a']); // Выделение всего текста
await browser.keys('Backspace'); // Удаление текста
Этот подход позволяет управлять не только глобально окном браузера, но и конкретными элементами интерфейса.
await browser.keys(['Control', 'a']);
await browser.keys(['Control', 'c']);
await browser.keys('NULL');
await browser.keys(['Control', 'Tab']); // Следующая вкладка
await browser.keys(['Control', 'Shift', 'Tab']); // Предыдущая вкладка
await browser.keys('NULL');
await $('#username').setValue('admni');
await browser.keys('Backspace'); // Исправление ошибки
await browser.keys('n'); // Корректный символ
'NULL'.Работа с клавишами в WebdriverIO позволяет создавать надежные и реалистичные автоматизированные сценарии, которые имитируют поведение настоящего пользователя, обеспечивая гибкость тестирования интерфейсов и сложных взаимодействий.