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