今天我们来聊一聊keyevent()
接口,这个接口不仅能帮我们实现一些操作,比如删除输入框的内容、返回上一页等(下文会有详细的示例介绍)。并且合理地使用keyevent()
接口,在一些情况下还会让我们脚本的兼容性更好。
在Airtest
中,keyevent()
接口是在设备上执行keyevent
按键事件,它包含 2 个参数:
keyname
– 平台相关的按键名称**kwargs
– 平台相关的参数 kwargs
可以看出来这个接口传入的参数都是与平台相关的,它支持的平台有:Android
, Windows
和 iOS
。
Android
的按键码是基于ADB
的,谷歌的 Android 按键码文档给我们详细介绍了keyevent()
接口以及所有的按键码(进入公众号回复Android 按键码获取文档链接或者自行上网搜索关键词 Android keyevent)。
在使用Android
设备的脚本中,当我们需要输入一些指定的按键,例如点一下HOME键
、BACK键
等,我们可以通过向keyevent()
接口传入keycode
参数的方式来实现,例如:
HOME键
--keyevent("HOME")
BACK键
--keyevent("BACK")
MENU键
--keyevent("MENU")
另外,这些keycode
还可以用固定的数值来代表,如上面的例子我们也可以用下面的方式来表达:
HOME键
--keyevent("3")
BACK键
--keyevent("4")
MENU键
--keyevent("82")
小知识拓展,在android
平台下,因为HOME
键比较常用,所以airtest
也封装了一个home()
接口来按下HOME
键:
home() # 相当于keyevent("HOME")
我们以大家经常碰到的情况 -- 删除输入框的内容,来讲解keyevent()
接口的实际应用。
用户在删除一个输入框内容时,会连续 N 次地去点击删除按钮,因此在airtest
脚本中想要实现 “清空输入框” 内容的操作,需要写一个循环连续运行 N 次keyevent
操作:
for i in range(10):
keyevent("KEYCODE_DEL")
删除键的固定数值为 “67”,所以示例代码中的keyevent("KEYCODE_DEL")
也可以写成keyevent("67")
。
这里有一个拓展小知识,如果已经接入了Poco
,我们也可以考虑直接使用Poco
的set_text
接口,将输入框内容设置为空字符串即可: poco("xxx").set_text("")
。
在很多情况下,BACK按钮
也可以进行灵活使用。我们经常在点开一个页面,想返回上一个页面时,会选择按 UI 按钮,但其实一般情况下keyevent(“BACK”)
也可以达到目的,简单直接且兼容性又好:
在Android
中,我们可以通过keyevent("HOME")
来实现按下HOME键
的操作,而在Windows
中,我们同样可以通过keyevent
接口发送一些按键响应。Android
的按键码是基于ADB
的,而Airtest
的Windows
模块则封装使用了pywinauto
支持的按键码,下图展示了有效的keycode
:
关于 Windows 按键码的更多详情我们可以查阅pywinauto.keyboard
文档的内容。(进入公众号回复Windows 按键码获取文档链接)。
在使用 Windows 的脚本中,如果我们想使用删除键,可以把代表删除键的keycode
传入到keyevent()
接口中:
# 注意Windows平台下的按键码需要加上括号{}
keyevent("{DEL}")
我们再举一个Windows
平台下应用keyevent()
接口的例子 -- 全选:
# 在pywinauto中,符号^也代表了CTRL键,因此^a即为全选(Ctrl+A)
keyevent("^a")
iOS 设备现在暂时 只支持 HOME
按键的keyevent
。
keyevent("HOME")