Airtest 超详细!各大平台的 keyevent () 解析

fishfish-yu · November 14, 2019 · Last by 尚酷米 replied at November 15, 2019 · 702 hits

前言

今天我们来聊一聊keyevent()接口,这个接口不仅能帮我们实现一些操作,比如删除输入框的内容、返回上一页等(下文会有详细的示例介绍)。并且合理地使用keyevent()接口,在一些情况下还会让我们脚本的兼容性更好。

keyevent()接口介绍

Airtest中,keyevent()接口是在设备上执行keyevent按键事件,它包含2个参数:

  • keyname – 平台相关的按键名称
  • **kwargs – 平台相关的参数 kwargs

可以看出来这个接口传入的参数都是与平台相关的,它支持的平台有:Android, WindowsiOS

Android平台下的keyevent()

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()接口实现删除输入框的内容

我们以大家经常碰到的情况--删除输入框的内容,来讲解keyevent()接口的实际应用。

用户在删除一个输入框内容时,会连续N次地去点击删除按钮,因此在airtest脚本中想要实现“清空输入框”内容的操作,需要写一个循环连续运行N次keyevent操作:

for i in range(10):
keyevent("KEYCODE_DEL")

删除键的固定数值为“67”,所以示例代码中的keyevent("KEYCODE_DEL")也可以写成keyevent("67")

这里有一个拓展小知识,如果已经接入了Poco,我们也可以考虑直接使用Pocoset_text接口,将输入框内容设置为空字符串即可: poco("xxx").set_text("")

利用keyevent()接口实现返回上一个页面

在很多情况下,BACK按钮也可以进行灵活使用。我们经常在点开一个页面,想返回上一个页面时,会选择按UI按钮,但其实一般情况下keyevent(“BACK”)也可以达到目的,简单直接且兼容性又好:

image

windows平台下的keyevent()

Android中,我们可以通过keyevent("HOME")来实现按下HOME键的操作,而在Windows中,我们同样可以通过keyevent接口发送一些按键响应。Android的按键码是基于ADB的,而AirtestWindows模块则封装使用了pywinauto支持的按键码,下图展示了有效的keycode

关于Windows按键码的更多详情我们可以查阅pywinauto.keyboard文档的内容。(进入公众号回复Windows按键码获取文档链接)。

在使用Windows的脚本中,如果我们想使用删除键,可以把代表删除键的keycode传入到keyevent()接口中:

# 注意Windows平台下的按键码需要加上括号{}
keyevent("{DEL}")
利用keyevent()接口实现全选

我们再举一个Windows平台下应用keyevent()接口的例子--全选:

# pywinauto中,符号^也代表了CTRL键,因此^a即为全选(Ctrl+A
keyevent("^a")

IOS平台下的keyevent()

iOS设备现在暂时 只支持 HOME 按键的keyevent

keyevent("HOME")
共收到 1 条回复 时间 点赞

关注,坐等有使用的机会

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up