action
Komenda action jest interfejsem niskiego poziomu do dostarczania wirtualizowanych działań urządzenia wejściowego do przeglądarki internetowej.
Oprócz poleceń wysokopoziomowych takich jak scrollIntoView
, doubleClick
, API Akcji zapewnia szczegółową kontrolę nad tym, co mogą robić wyznaczone urządzenia wejściowe. WebdriverIO udostępnia interfejs dla 3 rodzajów źródeł wejściowych:
- wejście klawiszowe dla urządzeń klawiatury
- wejście wskaźnikowe dla myszy, pióra lub urządzeń dotykowych
- oraz wejścia kółka dla urządzeń z kółkiem przewijania
Każdy łańcuch poleceń akcji musi zostać zakończony wywołaniem perform
, aby uruchomić zestaw akcji. Powoduje to zwolnienie akcji i wyzwolenie zdarzeń. Możesz to pominąć, przekazując true
(np. browser.actions(...).perform(true)
).
Źródło wejściowe klawiatury
Źródło wejściowe klawiatury jest źródłem wejściowym, które jest powiązane z urządzeniem typu klawiatura. Można je uruchomić używając parametru typu key
, np.:
browser.action('key')
Zwraca obiekt KeyAction
, który obsługuje następujące akcje:
down(value: string)
: generuje akcję wciśnięcia klawiszaup(value: string)
: generuje akcję zwolnienia klawiszapause(ms: number)
: wskazuje, że źródło wejściowe nic nie robi podczas konkretnego cyklu
Znaki specjalne
Jeśli chcesz używać znaków specjalnych, takich jak np. Control
, Page Up
lub Shift
, upewnij się, że importujesz obiekt Key
z pakietu webdriverio
w następujący sposób:
import { Key } from 'webdriverio'
Obiekt ten pozwala na dostęp do reprezentacji unicode żądanego znaku specjalnego.
Źródło wejściowe wskaźnika
Źródło wejściowe wskaźnika jest źródłem wejściowym, które jest powiązane z urządzeniem typu wskaźnik. Typ można określić podczas wywoływania polecenia action
, np.:
browser.action('pointer', {
parameters: { pointerType: 'mouse' } // "mouse" jest wartością domyślną, możliwe również: "pen" lub "touch"
})
Zwraca obiekt PointerAction
, który obsługuje następujące akcje:
down (button: 'left' | 'middle' | 'right')
: tworzy akcję naciśnięcia pojedynczego klawiszadown (params: PointerActionParams)
: tworzy akcję naciśnięcia pojedynczego klawisza z szczegółowymi parametramimove (x: number, y: number)
: Tworzy akcję przesunięcia wskaźnika ox
iy
pikseli od widokumove (params: PointerActionMoveParams)
: Tworzy akcję przesunięcia wskaźnika ox
iy
pikseli od określonegoorigin
.origin
może być zdefiniowane jako aktualna pozycja wskaźnika (np. "pointer"), widok (np. "viewport") lub środek określonego elementu.up (button: 'left' | 'middle' | 'right')
: tworzy akcję zwolnienia pojedynczego klawiszaup (params: PointerActionUpParams)
: tworzy akcję zwolnienia pojedynczego klawisza z szczegółowymi parametramicancel()
: Akcja, która anuluje bieżące wejście tego wskaźnika.pause(ms: number)
: wskazuje, że źródło wejściowe nic nie robi podczas konkretnego cyklu
Szczegółowe informacje na temat typów parametrów PointerActionParams
, PointerActionMoveParams
i PointerActionUpParams
można znaleźć w definicji typów projektu.
Źródło wejściowe kółka
Źródło wejściowe kółka jest źródłem wejściowym, które jest powiązane z urządzeniem typu kółko.
browser.action('wheel')
Zwraca obiekt WheelAction
, który obsługuje następujące akcje:
scroll (params: ScrollParams)
: przewija stronę do podanych współrzędnych lub początkupause(ms: number)
: wskazuje, że źródło wejściowe nic nie robi podczas konkretnego cyklu
Szczegółowe informacje na temat typu parametru ScrollParams
można znaleźć w definicji typów projektu.
Użycie
browser.action()
Przykłady
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
})