Перейти к основному содержимому

action

Обзор

Используйте команду action, чтобы выполнить действия ввода в одном из виртуализируемых устройств в веб-браузере.

В отличие от высокоуровневых команд scrollIntoView и doubleClick, Actions API обеспечивает более гранулярное управление устройствами ввода. Доступны следующие источники ввода:

  • ввод текста с клавиатуры для клавиатурных устройств;
  • управление мышью, пером или сенсорным устройством;
  • управление скроллом для устройств с колесом прокрутки.

Каждая цепочка вызовов action команд должна завершаться вызовом команды perform, чтобы начать выполнение указанного набора действий. Также это приводит к высвобождению всех нажатых клавиш, кнопок и т.д. на виртуальных устройствах ввода и запускает необходимые события. Высвобождение можно пропустить, передав аргумент true в команду perform. Пример:

await browser.action(...).perform(true);
к сведению

Поддержка данной команды и конкретных действий может различаться в зависимости от среды выполнения. За ходом разработки можно следить на wpt.fyi. Для мобильных устройств вы можете использовать специальные команды жестов Appium на iOS и Android.

Управление клавиатурой

Используется при указании 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
});