用户操作 API
概述
来自 Selenium 的 操作 API 可供使用,并且已准备好通过现有的 .perform()
命令在 Nightwatch 中使用。
可用操作
.clear()
释放所有键、指针并清除内部状态。
参数
无
.click([element]
)
用于执行简单鼠标左键单击(按下/抬起)的简写方法。
参数
名称 | 类型 | 描述 |
---|---|---|
元素 可选 |
WebElement | 如果指定,鼠标将首先移动到元素的中心,然后执行单击。 |
.contextClick([element]
)
用于执行简单鼠标右键单击(按下/抬起)的简写方法。
参数
名称 | 类型 | 描述 |
---|---|---|
元素 可选 |
WebElement | 如果指定,鼠标将首先移动到元素的中心,然后执行单击。 |
.doubleClick([element]
)
用于执行鼠标双击左键的简写方法。
参数
名称 | 类型 | 描述 |
---|---|---|
元素 可选 |
WebElement | 如果指定,鼠标将首先移动到元素的中心,然后执行单击。 |
.dragAndDrop(from
, to
)
- 移动到 from 元素(要拖动的元素)的中心。
- 按下鼠标左键。
- 如果 to 目标是
WebElement
,则将鼠标移动到其中心。否则,将鼠标移动指定偏移量。 - 释放鼠标左键。
参数
名称 | 类型 | 描述 |
---|---|---|
从 |
WebElement |
要按下鼠标左键以开始拖动的元素 |
到 |
WebElement 或{x: number, y: number} |
另一个要拖动的元素(将拖动到元素的中心),或一个指定要拖动偏移量的对象(以像素为单位)。 |
.insert(device
, ...actions
)
将操作附加到给定 device
的当前序列的末尾。如果启用了设备同步,则在插入操作后,将为所有其他设备插入暂停,以确保所有操作序列的长度相同。
参数
.keyDown(key
)
插入按下单个键的操作。
参数
名称 | 类型 | 描述 |
---|---|---|
键 |
字符串 | 数字 | 要按下的键。此键可以指定为键值、特定的 Unicode 代码点或包含单个 Unicode 代码点的字符串。 |
.keyUp(key
)
插入释放单个键的操作。
参数
名称 | 类型 | 描述 |
---|---|---|
键 |
字符串 | 数字 | 要释放的键。此键可以指定为键值、特定的 Unicode 代码点或包含单个 Unicode 代码点的字符串。 |
.move([options]
)
插入操作,以将鼠标相对于指定的 origin
移动 x
和 y
像素。原点可以定义为鼠标的 当前位置、视窗 或特定 WebElement
的中心。
可以使用 duration 参数(默认为 100 毫秒)调整浏览器驱动程序执行移动所需的时间(以毫秒为单位)。
参数
名称 | 类型 | 描述 |
---|---|---|
选项 可选 |
对象 | 移动选项。默认为在 100 毫秒内将鼠标移动到视窗的左上角。 可用值为 { duration: {Number|undefined}, origin: (Origin|WebElement|undefined), x: {Number|undefined}, y: {Number|undefined} } |
.pause(duration
, ...devices
)
为指定的设备插入暂停操作,确保每个设备在一次滴答中处于空闲状态。暂停的长度(以毫秒为单位)可以指定为此方法的第一个参数(默认为 0)。否则,你只需指定应该暂停的各个设备。
如果没有指定设备,则将为每个设备创建一个暂停操作(使用相同的持续时间)。
参数
.sendKeys(...keys
)
插入一系列操作,以键入提供的键序列。对于每个键,这将记录一对 keyDown 和 keyUp 操作。
参数
名称 | 类型 | 描述 |
---|---|---|
键 |
...字符串 | 数字 | 要键入的键。 |
.synchronize(...devices
)
确保此操作序列中引用的每个设备的操作序列长度相同。对于序列太短的设备,这将插入暂停,以便每个设备在每次滴答中都具有明确定义的操作。
参数
名称 | 类型 | 描述 |
---|---|---|
设备 |
...设备 | 要同步的特定设备。如果没有指定,则将同步每个设备的操作序列。 |
使用操作滴答
操作序列被分成一系列“滴答”。在每次滴答中,浏览器驱动程序将为操作序列中包含的每个设备执行一项操作。在滴答 0 时,驱动程序将执行为每个设备定义的第一项操作,在滴答 1 时执行每个设备的第二项操作,依此类推,直到所有操作都执行完毕。如果某个设备在特定滴答中没有定义操作,则它将自动暂停。
默认情况下,操作序列将被同步,因此每个滴答中只有一个设备具有定义的操作。请考虑以下代码示例
describe('user actions api', function() {
it('demo test', function() {
browser
.perform(function() {
const actions = this.actions({async: true});
return actions
.keyDown(Keys.SHIFT)
.move({origin: el})
.press()
.release()
.keyUp(Keys.SHIFT);
});
})
})
这将产生以下滴答序列
设备 | 滴答 1 | 滴答 2 | 滴答 3 | 滴答 4 | 滴答 5 |
---|---|---|---|---|---|
键盘 | keyDown(SHIFT) | pause() | pause() | pause() | keyUp(SHIFT) |
鼠标 | pause() | move({origin: el}) | press() | release() | pause() |
有关操作滴答的更多信息,请参阅 Selenium 文档。