action
Команда action - це низькорівневий інтерфейс для надання віртуалізованих дій введення пристроїв у веб-браузер.
Окрім високорівневих команд, таких як scrollIntoView
, doubleClick
, API Actions забезпечує детальний
контроль над тим, що саме можуть робити призначені пристрої введення. 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
})