学习 NightWatch - 复杂操作
复杂操作
操作 API 提供对指定输入设备可执行的操作的精细控制,Selenium 为 3 种输入源提供接口:
- 键盘设备的按键输入
- 鼠标、笔或触摸设备的指针输入
- 滚轮设备的滚轮输入
.perform()
import type { NightwatchBrowser, NightwatchTests } from 'nightwatch';
import type { Actions } from 'selenium-webdriver'
const TestOptions: NightwatchTests {
"Demo Test": (browser:NightwatchBrowser) => {
browser
.navigateTo('https://baidu.com')
.perform(() => {
const actions: Actions = this.actions({async: true})
return actions
.keyDown(Keys.SHIFT)
.keyUp(Keys.SHIFT)
})
}
}
export default TestOptions
Actions API
方法
鼠标方法
.click([Element])
使用鼠标执行简单左键点击
contextClick([Element])
使用鼠标执行简单右键点击
doubleClick([Element])
鼠标执行双击左键
dragAndDrop(Element,,to)
配置包含以下步骤的拖放操作:
- 移动到 Element 元素(需要拖动元素)中心
- 按下鼠标左键
- 如果目标是元素,则移动到其中心,否则按指定偏移量移动
- 松开鼠标左键
.press([MouseButton])
插入一个操作在鼠标当前位置按鼠标按钮
.release([MouseButton])
插入一个操作在鼠标当前位置释放鼠标按钮
键盘方法
keyDown(key)
插入单个键的操作
keyUp(key)
插入释放单个键的操作
.move([MoveOptions])
插入一个动作,用于相对于指定的移动鼠标和像素的操作
.sendKeys(...key)
插入一系列以 key 提供的键序列,对于每个键,将记录一对
.keyDown()
和.keyUp()
操作
设备方法
.clear()
释放所有键,指针并清除内部状态
.insert(device, ...actions)
将操作追加到给定 device 的当前序列的末尾,若启用设备同步,则插入操作后,将为其他设备插入暂停,以确保所有操作序列的长度相同
keyboard(): KeyBoard
返回键盘设备句柄
mouse(): Mouse
返回鼠标指针设备句柄
.puase(duration, ...device)
为指定设备插入暂停操作,确保设备在时钟周期内处于空闲状态
未指定设备则默认为每个设备创建并应用暂停
.sync(...device)
同步设备,如未指定,则同步所有设备,确保此操作序列中引用的每个操作序列长度相同,将会对过短序列插入暂停,以便每个设备在每个刻都都有一个明确操作
参数说明
Element 网页元素,指定后,在执行时,以该元素为中心
to 网页元素 | {x: number, y: number}
拖动到目标元素中心,或指定偏移量
device 设备
actions Actions API 操作
key 字符串 | 数字
指定键值、特定 unicode 码,或含单个 unicode 码的字符串
MoveOptions
// 移动选项,默认将鼠标移动到视口的左上角超过 100 毫秒 { // 持续时间 ms duration: Number | undefined, // 原点 // 可以定义为鼠标的当前位置、视口或特定 xyoriginWebElement 的中心 origin: Origin | WebElement | undefined, // x 偏移量 x: Number | undefined, // y 偏移量 y: Number | undefined }
duration
持续时间 ms
MouseButton
鼠标按钮
- LEFT 左键
- MIDDLE 中键
- RIGHT 右键
KeyBoard
键盘设备
Mouse
鼠标设备
操作刻度
动作序列被分为一系列刻度,每次刻度时,会对操作序列中每个设备执行单独操作,在周期 0 时,执行每个设备定义的第一个操作,1 为第二个,以此类推,直至完成全部
单个设备若未在特定周期定义操作,则自动暂停
import { NightwatchBrowser, NightwatchTests } from 'nightwatch'
import { Actions } from 'selenium-webdriver'
const TestOptions: NightWatchTests = {
"Demo Test": (browser: NightWatchBrowser) => {
browser
.perform(() => {
const actions = this.actions({async: true})
return actions
.keyDown(Keys.SHIFT)
.move({origin: el})
.press()
.release()
.keyUp(Keys.SHIFT)
})
}
}
生成以下序列:
| 设备 | 刻度1 | 刻度2 | 刻度3 | 刻度4 | 刻度5 |
| —- | ————– | ——————– | —– | —– | ————– |
| 键盘 | 按下按键 shift | 暂停 | 暂停 | 暂停 | 松开按键 shift |
| 鼠标 | 暂停 | 移动 原点当前元素 el | 按下 | 松开 | 暂停 |