跳至主要内容

操作

action 命令是用于向 Web 浏览器提供虚拟化设备输入操作的低级接口。

除了像 scrollIntoViewdoubleClick 这样的高级命令之外,Actions API 还提供了对指定输入设备可以执行的操作的精确控制。WebdriverIO 提供了一个用于 3 种输入源的接口

  • 键盘设备的按键输入
  • 鼠标、笔或触摸设备的指针输入
  • 以及滚轮设备的滚轮输入

每个 action 命令链都必须通过调用 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