acción
El comando action es una interfaz de bajo nivel para proporcionar acciones de entrada de dispositivo virtualizadas al navegador web.
Además de comandos de alto nivel como scrollIntoView
, doubleClick
, la API de Actions proporciona un control granular
sobre exactamente lo que los dispositivos de entrada designados pueden hacer. WebdriverIO proporciona una interfaz para 3 tipos de fuentes
de entrada:
- una entrada de tecla para dispositivos de teclado
- una entrada de puntero para dispositivos de ratón, lápiz o táctiles
- y entradas de rueda para dispositivos de rueda de desplazamiento
Cada cadena de comandos de acción debe completarse llamando a perform
para activar el conjunto de acciones. Esto
hace que las acciones se liberen y los eventos se disparen. Puedes
omitir esto pasando true
(por ejemplo, browser.actions(...).perform(true)
).
Fuente de entrada de tecla
Una fuente de entrada de tecla es una fuente de entrada asociada con un dispositivo tipo teclado. Puede activarse
utilizando el parámetro de tipo key
. Por ejemplo:
browser.action('key')
Devuelve un objeto KeyAction
que admite las siguientes acciones:
down(value: string)
: genera una acción de pulsación de teclaup(value: string)
: genera una acción de liberación de teclapause(ms: number)
: indica que una fuente de entrada no hace nada durante un tick particular
Caracteres Especiales
Si deseas usar caracteres especiales como Control
, Page Up
o Shift
, asegúrate de importar el
objeto Key
del paquete webdriverio
de la siguiente manera:
import { Key } from 'webdriverio'
El objeto te permite acceder a la representación unicode del carácter especial deseado.
Fuente de entrada de puntero
Una fuente de entrada de puntero es una fuente de entrada asociada con un dispositivo tipo puntero. El tipo puede ser
especificado al invocar el comando action
, por ejemplo:
browser.action('pointer', {
parameters: { pointerType: 'mouse' } // "mouse" es el valor predeterminado, también posible: "pen" o "touch"
})
Devuelve un objeto PointerAction
que admite las siguientes acciones:
down (button: 'left' | 'middle' | 'right')
: crea una acción para presionar una sola tecladown (params: PointerActionParams)
: crea una acción para presionar una sola tecla con parámetros detalladosmove (x: number, y: number)
: crea una acción para mover el punterox
ey
píxeles desde el viewportmove (params: PointerActionMoveParams)
: crea una acción para mover el punterox
ey
píxeles desde elorigin
especificado. Elorigin
puede definirse como la posición actual del puntero (por ejemplo, "pointer"), el viewport (por ejemplo, "viewport") o el centro de un elemento específico.up (button: 'left' | 'middle' | 'right')
: crea una acción para liberar una sola teclaup (params: PointerActionUpParams)
: crea una acción para liberar una sola tecla con parámetros detalladoscancel()
: una acción que cancela la entrada actual de este puntero.pause(ms: number)
: indica que una fuente de entrada no hace nada durante un tick particular
Puedes encontrar información detallada sobre los tipos de parámetros PointerActionParams
, PointerActionMoveParams
y PointerActionUpParams
en la definición de tipos del proyecto.
Fuente de entrada de rueda
Una fuente de entrada de rueda es una fuente de entrada asociada con un dispositivo tipo rueda.
browser.action('wheel')
Devuelve un objeto WheelAction
que admite las siguientes acciones:
scroll (params: ScrollParams)
: desplaza una página a las coordenadas u origen dadospause(ms: number)
: indica que una fuente de entrada no hace nada durante un tick particular
Puedes encontrar información detallada sobre el tipo de parámetro ScrollParams
en la definición de tipos del proyecto.
Uso
browser.action()
Ejemplos
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
})