action
O comando action é uma interface de baixo nível para fornecer ações de entrada de dispositivo virtualizado ao navegador web.
Além de comandos de alto nível como scrollIntoView
, doubleClick
, a API de Ações fornece controle granular sobre exatamente o que os dispositivos de entrada designados podem fazer. O WebdriverIO fornece uma interface para 3 tipos de fontes de entrada:
- uma entrada de tecla para dispositivos de teclado
- uma entrada de ponteiro para dispositivos de mouse, caneta ou toque
- e entradas de roda para dispositivos de roda de rolagem
Cada cadeia de comandos de ação deve ser concluída chamando perform
para acionar o conjunto de ações. Isso faz com que as ações sejam liberadas e os eventos sejam disparados. Você pode pular isso passando true
(por exemplo, browser.actions(...).perform(true)
).
Fonte de entrada de tecla
Uma fonte de entrada de tecla é uma fonte de entrada associada a um dispositivo do tipo teclado. Pode ser acionada usando os parâmetros de tipo key
. Por exemplo:
browser.action('key')
Ele retorna um objeto KeyAction
que suporta as seguintes ações:
down(value: string)
: gera uma ação de pressionar teclaup(value: string)
: gera uma ação de soltar teclapause(ms: number)
: indica que uma fonte de entrada não faz nada durante um determinado período
Caracteres Especiais
Se você quiser usar caracteres especiais como Control
, Page Up
ou Shift
, certifique-se de importar o objeto Key
do pacote webdriverio
da seguinte forma:
import { Key } from 'webdriverio'
O objeto permite que você acesse a representação unicode do caractere especial desejado.
Fonte de entrada de ponteiro
Uma fonte de entrada de ponteiro é uma fonte de entrada associada a um dispositivo de entrada do tipo ponteiro. O tipo pode ser especificado ao invocar o comando action
, por exemplo:
browser.action('pointer', {
parameters: { pointerType: 'mouse' } // "mouse" é o valor padrão, também possível: "pen" ou "touch"
})
Ele retorna um objeto PointerAction
que suporta as seguintes ações:
down (button: 'left' | 'middle' | 'right')
: cria uma ação para pressionar uma única tecladown (params: PointerActionParams)
: cria uma ação para pressionar uma única tecla com parâmetros detalhadosmove (x: number, y: number)
: Cria uma ação para mover o ponteirox
ey
pixels a partir da viewportmove (params: PointerActionMoveParams)
: Cria uma ação para mover o ponteirox
ey
pixels a partir daorigin
especificada. Aorigin
pode ser definida como a posição atual do ponteiro (ex: "pointer"), a viewport (ex: "viewport") ou o centro de um elemento específico.up (button: 'left' | 'middle' | 'right')
: cria uma ação para soltar uma única teclaup (params: PointerActionUpParams)
: cria uma ação para soltar uma única tecla com parâmetros detalhadoscancel()
: Uma ação que cancela a entrada atual deste ponteiro.pause(ms: number)
: indica que uma fonte de entrada não faz nada durante um determinado período
Você pode encontrar informações detalhadas sobre os tipos de parâmetros PointerActionParams
, PointerActionMoveParams
e PointerActionUpParams
na definição de tipo do projeto.
Fonte de entrada de roda
Uma fonte de entrada de roda é uma fonte de entrada associada a um dispositivo de entrada do tipo roda.
browser.action('wheel')
Ele retorna um objeto WheelAction
que suporta as seguintes ações:
scroll (params: ScrollParams)
: rola uma página para as coordenadas ou origem especificadaspause(ms: number)
: indica que uma fonte de entrada não faz nada durante um determinado período
Você pode encontrar informações detalhadas sobre o tipo de parâmetro ScrollParams
na definição de tipo do projeto.
Uso
browser.action()
Exemplos
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
})