アクション
action コマンドは、Webブラウザに仮想化されたデバイス入力アクションを提供するための低レベルインターフェースです。
scrollIntoView
、doubleClick
などの高レベルコマンドに加えて、Actions APIは指定された入力デバイスが実行できることを細かく制御できます。WebdriverIOは3種類の入力ソースのインターフェースを提供しています:
- キーボードデバイス用のキー入力
- マウス、ペンまたはタッチデバイス用のポインター入力
- スクロールホイールデバイス用のホイール入力
アクションコマンドのチェーンはすべて、perform
を呼び出して一連のアクションをトリガーする必要があります。これにより、アクションが解放され、イベントが発生します。true
を渡すことでこれをスキップできます(例:browser.actions(...).perform(true)
)。
キー入力ソース
キー入力ソースは、キーボード型デバイスに関連付けられた入力ソースです。key
タイプパラメータを使用してトリガーできます。例:
browser.action('key')
これにより、以下のアクションをサポートするKeyAction
オブジェクトが返されます:
down(value: string)
: キーダウンアクションを生成しますup(value: string)
: キーアップアクションを生成しますpause(ms: number)
: 特定のティックの間、入力ソースが何もしないことを示します
特殊文字
Control
、Page Up
またはShift
などの特殊文字を使用したい場合は、webdriverio
パッケージからKey
オブジェクトをインポートしてください:
import { Key } from 'webdriverio'
このオブジェクトを使用すると、目的の特殊文字のUnicode表現にアクセスできます。
ポインター入力ソース
ポインター入力ソースは、ポインタータイプの入力デバイスに関連付けられた入力ソースです。タイプはaction
コマンドを呼び出すときに指定できます。例:
browser.action('pointer', {
parameters: { pointerType: 'mouse' } // "mouse"がデフォルト値、"pen"または"touch"も可能
})
これにより、以下のアクションをサポートするPointerAction
オブジェクトが返されます:
down (button: 'left' | 'middle' | 'right')
: 単一のキーを押すアクションを作成しますdown (params: PointerActionParams)
: 詳細なパラメータを持つ単一のキーを押すアクションを作成しますmove (x: number, y: number)
: ビューポートからx
およびy
ピクセル分ポインターを移動するアクションを作成しますmove (params: PointerActionMoveParams)
: 指定されたorigin
からx
およびy
ピクセル分ポインターを移動するアクションを作成します。origin
はポインターの現在位置(例:「pointer」)、ビューポート(例:「viewport」)、または特定の要素の中心として定義できます。up (button: 'left' | 'middle' | 'right')
: 単一のキーを離すアクションを作成しますup (params: PointerActionUpParams)
: 詳細なパラメータを持つ単一のキーを離すアクションを作成しますcancel()
: このポインターの現在の入力をキャンセルするアクション。pause(ms: number)
: 特定のティックの間、入力ソースが何もしないことを示します
PointerActionParams
、PointerActionMoveParams
、PointerActionUpParams
パラメータタイプの詳細情報は、プロジェクトの型定義で確認できます。
ホイール入力ソース
ホイール入力ソースは、ホイールタイプの入力デバイスに関連付けられた入力ソースです。
browser.action('wheel')
これにより、以下のアクションをサポートするWheelAction
オブジェクトが返されます:
scroll (params: ScrollParams)
: 指定された座標または原点にページをスクロールしますpause(ms: number)
: 特定のティックの間、入力ソースが何もしないことを示します
ScrollParams
パラメータタイプの詳細情報は、プロジェクトの型定義で確認できます。
使用法
browser.action()
例
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
})