学习 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 | 按下 | 松开 | 暂停 |


学习 NightWatch - 复杂操作
http://localhost:8080/archives/e70c7296-1f8c-47c8-93cc-a843738fddb2
作者
inksha
发布于
2024年09月14日
许可协议