В WebdriverIO управление вводом с клавиатуры и мыши реализуется через actions API, которое предоставляет методы для имитации нажатий и отпусканий клавиш, кликов мышью, перемещений курсора и сложных комбинаций действий. Это особенно важно при автоматизации тестирования интерактивных элементов, таких как кнопки, поля ввода, drag-and-drop интерфейсы и горячие клавиши.
releaseKeys)Для симуляции нажатия и отпускания клавиш используется комбинация
методов keys() и releaseKeys() (или
performActions с соответствующими параметрами). В
WebdriverIO ключи передаются как строки или объекты с описанием
модификаторов.
Пример базового сценария:
// Нажать клавишу Shift и ввести букву
await browser.keys(['Shift', 'a']);
// Отпустить клавишу Shift
await browser.releaseKeys('Shift');
Особенности работы:
keys() автоматически “удерживает” модификаторы
(Shift, Control, Alt) до явного
их отпускания.releaseKeys(), последующие нажатия
могут некорректно интерпретироваться браузером.await browser.keys(['Control', 'a']); // Ctrl+A для выделения текста
await browser.releaseKeys(['Control']);
performActions с типом "key":await browser.performActions([{
type: 'key',
id: 'keyboard1',
actions: [
{ type: 'keyDown', value: 'Shift' },
{ type: 'keyDown', value: 'A' },
{ type: 'keyUp', value: 'A' },
{ type: 'keyUp', value: 'Shift' }
]
}]);
Этот подход дает полный контроль над временем удержания клавиш и последовательностью нажатий.
Управление мышью в WebdriverIO также реализуется через
actions() или через старые методы click() и
doubleClick(). Для симуляции удержания и отпускания кнопки
мыши используются события "pointerDown" и
"pointerUp".
Пример клика с удержанием и отпусканием:
// Переместить курсор на элемент
const button = await $('#submit');
await button.scrollIntoView();
// Удерживаем левую кнопку мыши
await browser.performActions([{
type: 'pointer',
id: 'mouse1',
parameters: { pointerType: 'mouse' },
actions: [
{ type: 'pointerMove', origin: button, x: 0, y: 0 },
{ type: 'pointerDown', button: 0 }, // левая кнопка
{ type: 'pause', duration: 500 }, // удерживаем 500ms
{ type: 'pointerUp', button: 0 } // отпускаем кнопку
]
}]);
Ключевые моменты:
pointerDown инициирует нажатие кнопки. Параметр
button принимает значения:
0 — левая кнопка1 — средняя кнопка2 — правая кнопкаpointerUp завершает нажатие.
Метод pause позволяет эмулировать задержку
удержания, что важно для drag-and-drop или тестирования долгих
кликов.
WebdriverIO позволяет объединять клавиатурные и мышиные действия в одной последовательности. Это необходимо, например, для тестирования контекстных меню с модификаторами:
await browser.performActions([
{
type: 'pointer',
id: 'mouse1',
parameters: { pointerType: 'mouse' },
actions: [
{ type: 'pointerMove', origin: await $('#element'), x: 0, y: 0 },
{ type: 'pointerDown', button: 2 }, // правая кнопка
{ type: 'pointerUp', button: 2 }
]
},
{
type: 'key',
id: 'keyboard1',
actions: [
{ type: 'keyDown', value: 'Shift' },
{ type: 'keyUp', value: 'Shift' }
]
}
]);
Такой подход обеспечивает реалистичное поведение пользователя, когда клавиши и мышь используются одновременно.
performActions
предпочтительнее для сложных сценариев, так как оно полностью управляет
потоками действий.pause) между нажатиями и
отпусканиями помогают избежать срабатывания асинхронных событий раньше
времени.performActions снижает риск конфликтов между различными
потоками ввода.keys и releaseKeys стали удобными
для быстрых клавиатурных сценариев.performActions позволяет управлять несколькими
устройствами ввода одновременно (мышь + клавиатура + сенсорный
экран).Эти возможности делают WebdriverIO мощным инструментом для автоматизации сложных пользовательских интеракций, где важно точное управление отпусканием клавиш и кнопок мыши.