В WebdriverIO класс Actions используется для работы с
низкоуровневыми пользовательскими взаимодействиями с элементами
веб-страницы. Он позволяет моделировать сложные сценарии, такие как
перетаскивание, масштабирование, касания и нажатия клавиш. Использование
Actions даёт возможность управлять событиями браузера на
уровне протокола WebDriver, что особенно важно при тестировании
динамических интерфейсов.
Экземпляр класса Actions не создаётся напрямую через
new. Вместо этого используется метод
browser.action():
const action = browser.action('pointer', { pointerType: 'mouse' });
'pointer' или 'key').pointerType: 'mouse' или
'touch'.Существуют два основных типа действий:
move({x, y, origin})Перемещает указатель мыши к заданной точке.
x и y — координаты относительно
origin.origin — элемент или 'pointer',
относительно которого выполняется движение.Пример перемещения к элементу и клика:
const button = $('#submit');
action
.move({ origin: button })
.press()
.release()
.perform();
press() и
release()press() — нажатие кнопки мыши (по умолчанию
левая).release() — отпускание кнопки.pointerMove()Позволяет перемещать указатель по экрану с указанием смещения или
координат. Отличается от move возможностью точного контроля
скорости и траектории движения.
doubleClick()Сочетает последовательность press и release
дважды для эмуляции двойного клика.
keyDown(key) и
keyUp(key)Используются для имитации нажатий клавиш:
action
.keyDown('Control')
.keyDown('a')
.keyUp('a')
.keyUp('Control')
.perform();
Позволяет комбинировать клавиши для шорткатов, например
Ctrl + A.
sendKeys(keys)Отправляет последовательность символов в активный элемент:
action
.sendKeys('Hello World')
.perform();
Поддерживает специальные клавиши через объект Key,
например Key.Enter, Key.Tab.
Класс Actions позволяет создавать цепочки событий,
которые выполняются одной командой .perform(). Все вызовы
методов до perform() сохраняются в очереди:
const input = $('#input');
action
.move({ origin: input })
.press()
.sendKeys('Test Input')
.release()
.perform();
В этом примере последовательно выполняется: перемещение к элементу, клик, ввод текста и отпускание кнопки мыши.
Для мобильного тестирования используются сенсорные действия:
tap({ x, y, origin }) — имитация касания.doubleTap({ x, y, origin }) — двойное касание.longPress({ x, y, duration }) — удержание пальца на
элементе заданное время.swipe({ start, end, duration }) — имитация свайпа по
координатам.Пример свайпа по элементу:
const slider = $('#slider');
action
.move({ origin: slider })
.press()
.move({ origin: slider, x: 100, y: 0 })
.release()
.perform();
click(), setValue()), Actions не
ждут автоматического появления элементов, поэтому рекомендуется
использовать явное ожидание перед действиями.Эмуляция Drag & Drop с клавишей модификатором:
const source = $('#source');
const target = $('#target');
action
.keyDown('Shift')
.move({ origin: source })
.press()
.move({ origin: target })
.release()
.keyUp('Shift')
.perform();
Здесь имитируется перенос элемента с удержанием клавиши
Shift, что полезно для многократного выбора в интерфейсах
типа файловых менеджеров.
move,
press, release, pointerMove,
doubleClick.keyDown,
keyUp, sendKeys.tap,
doubleTap, longPress, swipe..perform().origin позволяют точно позиционировать взаимодействия.Класс Actions обеспечивает гибкое управление сложными
сценариями взаимодействия с веб-страницей, объединяя работу с мышью,
клавиатурой и сенсорными устройствами в единую цепочку команд.