action
Обзор
Используйте команду action
, чтобы выполнить действия ввода в одном из виртуализируемых устройств в веб-браузере.
В отличие от высокоуровневых команд scrollIntoView и doubleClick, Actions API обеспечивает более гранулярное управление устройствами ввода. Доступны следующие источники ввода:
- ввод текста с клавиатуры для клавиатурных устройств;
- управление мышью, пером или сенсорным устройством;
- управление скроллом для устройств с колесом прокрутки.
Каждая цепочка вызовов action
команд должна завершаться вызовом команды perform
, чтобы начать выполнение указанного набора действий. Также это приводит к высвобождению всех нажатых клавиш, кнопок и т.д. на виртуальных устройствах ввода и запускает необходимые события. Высвобождение можно пропустить, передав аргумент true
в команду perform
. Пример:
await browser.action(...).perform(true);
Управление клавиатурой
Используется при указании key
в качестве аргумента команды action
. Пример:
await browser.action("key");
Возвращает объект KeyAction
, который поддерживает следующие действия:
down(value: string)
— создает действие нажатия клавиши;up(value: string)
— создает действие отпускания клавиши;pause(ms: number)
— указывает, что источник ввода ничего не делает указанное количество времени.
Специальные символы
Для использования специальных символов (Control
, Page Up
, Shift
и т.д.) можно использовать объект Key
из пакета webdriverio. В нем содержатся unicode представления всех нужных специальных символов. Пример:
import { Key } from "webdriverio";
await browser.action("key").down(Key.Ctrl).perform();
Примеры использования
import { Key } from "webdriverio";
it("should emit key events using key action commands", async ({ browser }) => {
const elem = await browser.$("input");
await elem.click(); // сделать элемент активным
await browser.action("key").down("f").down("o").down("o").up("f").up("o").up("o").perform();
console.log(await elem.getValue()); // возвращает "foo"
// скопировать значение из элемента input
await browser.action("key").down(Key.Ctrl).down("c").pause(10).up(Key.Ctrl).up("c").perform();
});
Вместо серии down/up
событий лучше использовать команду setValue
. Пример исключительно для демонстрации принципов работы команды action
.
Управление указателем
Используется при указании pointer
в качестве аргумента команды action
, также можно указать тип указателя. Пример:
await browser.action("pointer", {
parameters: { pointerType: "mouse" }, // "mouse" значение по умолчанию, также доступны: "pen" or "touch"
});
Возвращает объект PointerAction
, который поддерживает следующие действия:
down(button: 'left' | 'middle' | 'right')
— создает действие для нажатия одной клавиши;down(params: PointerActionParams)
— создает действие для нажатия одной клавиши с подробными параметрами;move(x: number, y: number)
— создает действие для перемещения указателя наx
иy
пикселей относительно вьюпорта;move(params: PointerActionMoveParams)
— создает действие для перемещения указателя наx
иy
пикселей из указанного начала координат. Начало координат может быть определено как текущая позиция указателя, вьюпорта или центр определенного элемента;up(button: 'left' | 'middle' | 'right')
— создает действие для отпускания одной клавиши;up(params: PointerActionUpParams)
— создает действие для отпускания одной клавиши с подробными параметрами;cancel()
— создает действие, которое отменяет текущее положение указателя;pause(ms: number)
— указывает, что источник ввода ничего не делает указанное количество времени.
Подробную информацию о типах параметров PointerActionParams, PointerActionMoveParams и PointerActionUpParams можно найти в исходном коде webdriverio.
Примеры использования
it("drag and drop using pointer action command", async ({ browser }) => {
const origin = await browser.$("#source");
const targetOrigin = await browser.$("#target");
await browser
.action("pointer")
.move({ duration: 0, origin, x: 0, y: 0 })
.down({ button: 0 }) // левая кнопка
.pause(10)
.move({ duration: 0, origin: targetOrigin })
.up({ button: 0 })
.perform();
});
Управление колесом прокрутки
Используется при указании wheel
в качестве аргумента команды action
. Пример:
await browser.action("wheel");
Возвращает объект WheelAction
, который поддерживает следующие действия:
scroll(params: ScrollParams)
— прокручивает страницу до указанных координат или до начала координат;pause(ms: number)
— указывает, что источник ввода ничего не делает указанное количество времени.
Подробную информацию о типе параметра ScrollParams можно найти в исходном коде webdriverio.
Примеры использования
it("should scroll using wheel action commands", async ({ browser }) => {
console.log(await browser.execute(() => window.scrollY)); // возвращает 0
await browser
.action("wheel")
.scroll({
deltaX: 0,
deltaY: 500,
duration: 200,
})
.perform();
console.log(await browser.execute(() => window.scrollY)); // возвращает 500
});