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 oxiypikseli od widokumove (params: PointerActionMoveParams): Tworzy akcję przesunięcia wskaźnika oxiypikseli od określonegoorigin.originmoż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
})