跳至主要內容

action

action 命令是一個底層介面,用於向網頁瀏覽器提供虛擬化的裝置輸入動作。

除了像 scrollIntoViewdoubleClick 等高階命令外,Actions API 還提供對指定輸入裝置可以執行之動作的細微控制。 WebdriverIO 為 3 種輸入來源提供介面

  • 用於鍵盤裝置的按鍵輸入
  • 用於滑鼠、觸控筆或觸控裝置的指標輸入
  • 以及用於滾輪裝置的滾輪輸入

每個動作命令鏈都必須呼叫 perform 才能觸發一組動作。 這會導致動作被釋放並觸發事件。 您可以通過傳入 true 來跳過此操作(例如 browser.actions(...).perform(true))。

資訊

對此命令和特定動作的支援可能會因環境而異。 您可以在 wpt.fyi 上追蹤開發進度。 對於行動裝置,您可能需要在 iOSAndroid 上使用 Appium 特定的手勢命令。

按鍵輸入來源

按鍵輸入來源是與鍵盤類型裝置相關聯的輸入來源。 可以使用 key 類型參數觸發,例如:

browser.action('key')

它會傳回一個支援下列動作的 KeyAction 物件

  • down(value: string):產生一個按鍵按下動作
  • up(value: string):產生一個按鍵放開動作
  • pause(ms: number):表示輸入來源在特定滴答聲期間不執行任何操作

特殊字元

如果您想使用特殊字元,例如 ControlPage UpShift,請務必從 webdriverio 套件中匯入 Key 物件,如下所示

import { Key } from 'webdriverio'

該物件允許您存取所需特殊字元的 Unicode 表示法。

指標輸入來源

指標輸入來源是與指標類型輸入裝置相關聯的輸入來源。 呼叫 action 命令時可以指定類型,例如:

browser.action('pointer', {
parameters: { pointerType: 'mouse' } // "mouse" is default value, also possible: "pen" or "touch"
})

它會傳回一個支援下列動作的 PointerAction 物件

  • down (button: 'left' | 'middle' | 'right'):建立一個按下單個按鍵的動作
  • down (params: PointerActionParams):建立一個按下具有詳細參數的單個按鍵的動作
  • move (x: number, y: number):建立一個將指標從視窗移動 xy 像素的動作
  • move (params: PointerActionMoveParams):建立一個將指標從指定 origin 移動 xy 像素的動作。 origin 可以定義為指標的目前位置(例如「pointer」)、視窗(例如「viewport」)或特定元素的中心。
  • up (button: 'left' | 'middle' | 'right'):建立一個釋放單個按鍵的動作
  • up (params: PointerActionUpParams):建立一個釋放具有詳細參數的單個按鍵的動作
  • cancel():取消此指標目前輸入的動作。
  • pause(ms: number):表示輸入來源在特定滴答聲期間不執行任何操作

您可以在專案類型定義中找到有關 PointerActionParamsPointerActionMoveParamsPointerActionUpParams 參數類型的詳細資訊。

滾輪輸入來源

滾輪輸入來源是與滾輪類型輸入裝置相關聯的輸入來源。

browser.action('wheel')

它會傳回一個支援下列動作的 WheelAction 物件

  • scroll (params: ScrollParams):將頁面捲動到指定座標或原點
  • pause(ms: number):表示輸入來源在特定滴答聲期間不執行任何操作

您可以在專案類型定義中找到有關 ScrollParams 參數類型的詳細資訊。

用法
browser.action()
範例
pointer-action.js
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()
});
key-action.js
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()
})
wheel-action.js
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
})

歡迎!我能幫上什麼忙?

WebdriverIO AI Copilot