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 dixeypixel dal viewportmove (params: PointerActionMoveParams): crea un'azione per spostare il puntatore dixeypixel dall'originspecificata. L'originpuò 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
})