模拟按键输入pressKeys方法
在自动化测试中,常常需要模拟键盘输入,特别是对文本框或其他需要键盘输入的控件进行操作。pressKeys()
方法是 CukeTest 中广泛支持的一项功能,适用于各种控件。通过此方法,您可以模拟在输入框中输入字符串或执行其他键盘操作。不同的技术类型中,pressKeys()
方法的使用路径如下:
方法签名
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
参数。- textOnly:
返回值:
pressKeys()
是一个异步方法,无返回值。
功能概述
pressKeys()
通过模拟键盘信号来实现字符串输入或组合键操作,因此不仅可以用于简单的文本输入,还可以进行复杂的键盘操作,如模拟登录、导航、剪切、粘贴等操作。以下样例代码展示了如何使用 pressKeys()
实现登录功能:
await input.pressKeys("username{TAB}password~");
input.pressKeys("username{TAB}password~")
其中,{TAB}
表示按下 Tab 键,~
表示回车键。此代码可用于模拟在支持 Tab 切换和回车提交的登录界面上输入账号和密码。
样例1:输入特殊字符
如果需要输入包含特殊字符的文本,比如波浪号 ~
、百分号 %
等,这些字符会与键指令产生冲突。这时,可以使用花括号 {}
包裹特殊字符来避免歧义。如下示例展示了如何输入复杂的特殊字符:
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}
来表示制表符,如下所示:
await textarea.pressKeys("{ENTER}");
await textarea.pressKeys("~"); // 回车键的另一个表示方法
await textarea.pressKeys("{TAB}");
textarea.pressKeys("{ENTER}")
textarea.pressKeys("~") # 回车键的另一种表示方法
textarea.pressKeys("{TAB}")
样例3:使用组合键操作
有时您可能需要使用组合键完成某些任务,比如关闭窗口或剪切、粘贴文本。以下代码展示了如何使用 pressKeys()
模拟常用的组合键操作:
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,关闭窗口
组合键和普通键的区别
当使用控制键(如 Shift
、Ctrl
、Alt
)时,pressKeys()
会将这些键与后续的按键作为组合键处理。如果需要模拟按住某个控制键进行连续输入,可以使用括号来包裹字符串,如下所示:
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()
是 测试对象 的实例方法,必须指定键盘输入的目标控件才能使用。