action
Il comando action è un'interfaccia di basso livello per fornire azioni di input virtualizzate al browser web.
Oltre ai comandi di alto livello come scrollIntoView
, doubleClick
, l'API Actions fornisce un controllo granulare
su esattamente ciò che i dispositivi di input designati possono fare. WebdriverIO fornisce un'interfaccia per 3 tipi di fonti
di input:
- un input da tastiera per dispositivi di tipo tastiera
- un input puntatore per dispositivi mouse, penna o touch
- e input della rotella di scorrimento per dispositivi con rotella di scorrimento
Ogni catena di comandi di azione deve essere completata chiamando perform
per attivare l'insieme di azioni. Questo
fa sì che le azioni vengano rilasciate e gli eventi vengano generati. Puoi
saltare questo passaggio passando true
(ad esempio browser.actions(...).perform(true)
).
Fonte di input da tastiera
Una fonte di input da tastiera è una fonte di input associata a un dispositivo di tipo tastiera. Può essere attivata
utilizzando il parametro di tipo key
. Ad esempio:
browser.action('key')
Restituisce un oggetto KeyAction
che supporta le seguenti azioni:
down(value: string)
: genera un'azione di pressione del tastoup(value: string)
: genera un'azione di rilascio del tastopause(ms: number)
: indica che una fonte di input non fa nulla durante un particolare tick
Caratteri speciali
Se desideri utilizzare caratteri speciali come ad esempio Control
, Page Up
o Shift
, assicurati di importare
l'oggetto Key
dal pacchetto webdriverio
in questo modo:
import { Key } from 'webdriverio'
L'oggetto ti consente di accedere alla rappresentazione unicode del carattere speciale desiderato.
Fonte di input puntatore
Una fonte di input puntatore è una fonte di input associata a un dispositivo di tipo puntatore. Il tipo può essere
specificato quando si invoca il comando action
, ad esempio:
browser.action('pointer', {
parameters: { pointerType: 'mouse' } // "mouse" è il valore predefinito, possibili anche: "pen" o "touch"
})
Restituisce un oggetto PointerAction
che supporta le seguenti azioni:
down (button: 'left' | 'middle' | 'right')
: crea un'azione per premere un singolo tastodown (params: PointerActionParams)
: crea un'azione per premere un singolo tasto con parametri dettagliatimove (x: number, y: number)
: crea un'azione per spostare il puntatore dix
ey
pixel dal viewportmove (params: PointerActionMoveParams)
: crea un'azione per spostare il puntatore dix
ey
pixel dall'origin
specificata. L'origin
può essere definita come la posizione corrente del puntatore (es. "pointer"), il viewport (es. "viewport") o il centro di un elemento specifico.up (button: 'left' | 'middle' | 'right')
: crea un'azione per rilasciare un singolo tastoup (params: PointerActionUpParams)
: crea un'azione per rilasciare un singolo tasto con parametri dettagliaticancel()
: un'azione che annulla l'input corrente di questo puntatore.pause(ms: number)
: indica che una fonte di input non fa nulla durante un particolare tick
Puoi trovare informazioni dettagliate sui tipi di parametro PointerActionParams
, PointerActionMoveParams
e PointerActionUpParams
nella definizione dei tipi del progetto.
Fonte di input rotella
Una fonte di input rotella è una fonte di input associata a un dispositivo di tipo rotella.
browser.action('wheel')
Restituisce un oggetto WheelAction
che supporta le seguenti azioni:
scroll (params: ScrollParams)
: scorre una pagina verso coordinate o origine datepause(ms: number)
: indica che una fonte di input non fa nulla durante un particolare tick
Puoi trovare informazioni dettagliate sul tipo di parametro ScrollParams
nella definizione dei tipi del progetto.
Utilizzo
browser.action()
Esempi
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
})