アクション
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
})