模拟按键输入pressKeys方法

在自动化测试中,常常需要模拟键盘输入,特别是对文本框或其他需要键盘输入的控件进行操作。pressKeys() 方法是 CukeTest 中广泛支持的一项功能,适用于各种控件。通过此方法,您可以模拟在输入框中输入字符串或执行其他键盘操作。不同的技术类型中,pressKeys() 方法的使用路径如下:

  1. 全局 Keyboard 对象
  2. Qt 自动化
  3. Windows 自动化
  4. Java 自动化
  5. ATK 自动化
  6. 虚拟控件

方法签名

JavaScript
Python
interface PressKeysOptions {
    textOnly?: boolean,
    cpm?: number
}

pressKeys(keys: string, options?: PressKeysOptions | number): Promise<void>;
class PressKeysOptions():
    textOnly: bool
    cpm: int

参数说明

  • keys: string 类型
    输入的按键或字符串,支持组合键。字符串最大长度为 1024 个字符。需要注意,字符串中的某些特殊字符(如 ^+~%{}())会被解析为控制键(如 Shift、Ctrl),而非作为字符输入。具体的键指令请参考附录: 输入键对应表

  • options: PressKeysOptions | number(可选)
    控制输入模式的可选参数,包含以下内容:

    • textOnly: boolean 类型,设为 true 时,将所有字符作为普通文本输入,忽略控制键指令,等效于 Keyboard.typeString() 方法。
    • cpm: number 类型,即每分钟输入的字符数,用于控制输入速度。建议 cpm 值设置在 200 以上。由于不同系统及应用对输入速度的处理方式不同,实际的输入速度可能与设置值有所偏差。

    如果直接传入数字作为 options,该值将被视为 cpm 参数。

  • 返回值:
    pressKeys() 是一个异步方法,无返回值。

功能概述

pressKeys() 通过模拟键盘信号来实现字符串输入或组合键操作,因此不仅可以用于简单的文本输入,还可以进行复杂的键盘操作,如模拟登录、导航、剪切、粘贴等操作。以下样例代码展示了如何使用 pressKeys() 实现登录功能:

JavaScript
Python
await input.pressKeys("username{TAB}password~");
input.pressKeys("username{TAB}password~")

其中,{TAB} 表示按下 Tab 键,~ 表示回车键。此代码可用于模拟在支持 Tab 切换和回车提交的登录界面上输入账号和密码。

样例1:输入特殊字符

如果需要输入包含特殊字符的文本,比如波浪号 ~、百分号 % 等,这些字符会与键指令产生冲突。这时,可以使用花括号 {} 包裹特殊字符来避免歧义。如下示例展示了如何输入复杂的特殊字符:

JavaScript
Python

let textarea = model.getDocument("文本编辑器"); // 以下样例同
//需求:输入特殊符号"+^%~()[]{}"
await textarea.pressKeys("{+}");
await textarea.pressKeys("{^}");
await textarea.pressKeys("{%}");
await textarea.pressKeys("{~}");
await textarea.pressKeys("{(}");
await textarea.pressKeys("{)}");
await textarea.pressKeys("{[}");
await textarea.pressKeys("{]}");
await textarea.pressKeys("{{}");
await textarea.pressKeys("{}}");
await textarea.pressKeys("\""); // 引号需要转义

textarea = model.getDocument("文本编辑器"); # 以下样例同
#需求:输入特殊符号"+^%~()[]{}"
textarea.pressKeys("{+}")
textarea.pressKeys("{^}")
textarea.pressKeys("{%}")
textarea.pressKeys("{~}")
textarea.pressKeys("{(}")
textarea.pressKeys("{)}")
textarea.pressKeys("{[}")
textarea.pressKeys("{]}")
textarea.pressKeys("{{}")
textarea.pressKeys("{}}")
textarea.pressKeys("\"")  # 引号需要转义

样例2:插入换行符和制表符

如果需要在文本中插入换行符或制表符,您可以使用 {ENTER} 来表示回车键,{TAB} 来表示制表符,如下所示:

JavaScript
Python
await textarea.pressKeys("{ENTER}");
await textarea.pressKeys("~");  // 回车键的另一个表示方法
await textarea.pressKeys("{TAB}");
textarea.pressKeys("{ENTER}")
textarea.pressKeys("~")  # 回车键的另一种表示方法
textarea.pressKeys("{TAB}")

样例3:使用组合键操作

有时您可能需要使用组合键完成某些任务,比如关闭窗口或剪切、粘贴文本。以下代码展示了如何使用 pressKeys() 模拟常用的组合键操作:

JavaScript
Python
await textarea.pressKeys("+{LEFT 5}");  // Shift + 左方向键,选中5个字符
await textarea.pressKeys("^x");         // Ctrl + x,剪切
await textarea.pressKeys("^v");         // Ctrl + v,粘贴
await textarea.pressKeys("^w");         // Ctrl + w,关闭窗口
await textarea.pressKeys("%{F4}");      // Alt + F4,关闭窗口
textarea.pressKeys("+{LEFT 5}")  # Shift + 左方向键,选中5个字符
textarea.pressKeys("^x")         # Ctrl + x,剪切
textarea.pressKeys("^v")         # Ctrl + v,粘贴
textarea.pressKeys("^w")         # Ctrl + w,关闭窗口
textarea.pressKeys("%{F4}")      # Alt + F4,关闭窗口

组合键和普通键的区别

当使用控制键(如 ShiftCtrlAlt)时,pressKeys() 会将这些键与后续的按键作为组合键处理。如果需要模拟按住某个控制键进行连续输入,可以使用括号来包裹字符串,如下所示:

JavaScript
Python
await textarea.pressKeys("+abc");   // 输入结果为 Abc
await textarea.pressKeys("+(abc)"); // 输入结果为 ABC
textarea.pressKeys("+abc")   # 输入结果为 Abc
textarea.pressKeys("+(abc)") # 输入结果为 ABC

如果需要按住某个控制键并同时进行鼠标操作(如按住 Ctrl 键进行拖拽),可以结合 Keyboard.keyDown()Keyboard.keyUp() 方法,详细用法请参考 组合键点击

总结

pressKeys() 是一个非常灵活的 API,适用于模拟各种键盘输入。请注意,pressKeys() 是 测试对象 的实例方法,必须指定键盘输入的目标控件才能使用。

results matching ""

    No results matching ""