此文章来源于项目官方公众号:“AirtestProject”
版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途
1.前言
阅读本文你将了解:
- Airtest的专用输入法
Yosemite.apk
- Airtest的
text
接口 - 输入法的回车和搜索问题
- 拓展:Poco的
set_text
接口
PS:本文重点说明Android设备输入文本的相关问题,iOS设备和网页的输入问题此文不展开讨论。
2. Airtest的专用输入法 Yosemite.apk
在Android平台下,Airtest配了一个专用的输入法 Yosemite.apk
。我们可以在Airtest库的这个路径下找到它:
当我们在Android设备上运行到输入文本的接口,比如 text
接口时,会自动启用这个 Yosemite
输入法来进行输入。(注意,如果是初次调用输入接口,则会先在该Android设备上自动安装该应用,再启用它来进行输入操作。)
1)没有软键盘的Yosemite输入法
在启用 Yosemite
输入法时,Android设备的底部会有一个输入法的提示条,并且该输入法不像常规的输入法那样,Yosemite输入法没有软键盘:
所以很多同学初次见到这个输入法的时候,都会感到疑惑。其实这是正常的。也有些同学会问,能不能去掉这个输入法的提示,目前暂时是不支持去掉的。
如果同学们遇到了 Yosemite
的底部提示,遮挡到手机应用按钮的情况,可以把具体机型、具体应用和按钮页面截图,提单给我们的开发者去核查和处理: https://airtest.netease.com/issue_create 。
2)如何切换输入法
那当Android设备启用 Yosemite
输入法时,我们就只能通过脚本来对设备进行输入,无法手工输入。
如果需要手工输入,可以在手机系统的输入法设置中,把输入法切换回系统输入法即可恢复。
如果同学们使用了我们的AirtestIDE,也可以使用它提供的 安卓手机助手功能
,在手机助手中可以简单地点击鼠标来切换输入法:
3)能不能不使用Yosemite输入法
也有同学会觉得,这个输入法没有键盘,手动输入的时候还要切换到别的输入法,太麻烦了,那我能不能不使用 Yosemite
输入法呢?
其实是可以的,如果我们确定在测试脚本中,不会涉及任何文本输入的操作;或者是只需要输入英文,并且是以 adb shell input
的方式来进行输入的,我们可以不在手机上安装 Yosemite
输入法。
shell("input text 'hello world'")
我们也可以通过下述方式,在脚本中指定不使用 Yosemite
输入法:
from airtest.core.api import *
# 方式一
auto_setup(__file__,devices=["android:///?ime_method=ADBIME"])
# 方式二
init_device("Android", ime_method="ADBIME")
3. Airtest的 text
接口
那了解完输入法之后,我们来看下输入的接口。Airtest框架给我们提供的输入接口是 text
接口,在使用 text
接口之前,我们 必须先点击输入框,激活下输入光标 ,可以用图像点击、控件点击,均可,只要保证输入框的输入光标已经激活,我们就可以使用 text
接口进行输入。
1)text
接口默认的回车操作
text
接口有一个默认参数 enter=True
,会在输入完毕后自动按一下回车键(相当于 keyevent("ENTER")
),假如不需要,请传入 enter=False
。
text("test", enter=False)
2)text
接口的搜索操作
部分输入框,需要在输入内容后,点击输入键盘上的 搜索
按钮才能够激活搜索操作,可以传入 search=True
参数:
text("test", search=True)
输入法中显示的额外按键是 EDITOR CODE
,刚才这个代码中的 search=True
实际上是传入了 editor code 3
。因为搜索键是最常用的按键,因此我们将它封装进了 text
接口中:
如果有点击除了 搜索
以外其他按钮的需求,需要查阅文档 Editor Action Code
来获取代码(如果该网页访问不了的话,可以自行搜索关键词 IME_ACTION_SEARCH
),然后手动传入代码进行点击。
dev = device()
# 按一下输入法的Go按钮 IME_ACTION_GO,对应键值为2
dev.yosemite_ime.code("2")
3)text
接口回车失效
如果我们在使用类似 text("11")
这样的脚本,不能正确回车的时候,我们可以使用下述方式来添加这个回车的效果:
text("11")
ime=G.DEVICE.yosemite_ime
ime.code(6)
4)输入失败的处理
text
输入失败,大概率都绕不过下面几个问题:
- 手机阻止了
Yosemite.apk
的安装和运行 - 没有将
Yosemite
输入法设置为手机默认输入法 - 输入账号密码之类的,没有关闭手机的
安全输入
/安全键盘
设置 - 部分手机的兼容性问题
- 部分模拟器未关闭
物理键盘
的问题
那对应地,当出现无法输入,或者输入报错的时候,我们就可以依次检查下是否有上述情况,比如检查手机上是否正常安装了 Yosemite.apk
,输入法设置里,是否将 Yosemite
设置为了默认输入法等等。
手机的兼容性问题,我们可以参考官方教程文档的Android连接常见问题这部分的内容: https://airtest.doc.io.netease.com/IDEdocs/3.2device_connection/3_android_faq/#2_1 。
输入密码界面黑屏、无法输入时,也别需要关注手机上的 安全输入
、 安全键盘
之类的设置是否已经关闭。
4. 拓展:poco的 set_text
接口
那其实,除了Airtest框架提供的 text
接口,Poco框架也提供了输入的 set_text
接口:
poco("com.android.mms:id/recipients_editor").click()
poco("com.android.mms:id/recipients_editor").set_text("test")
如果我们测试的应用支持poco,比如原生应用,或者是已经接入了pocoSDK的游戏应用,在输入时,都可以使用这个 set_text
接口。
相比Airtest的 text
接口,它还有一点比较便利的是快速清空输入框:
poco("com.android.mms:id/recipients_editor").set_text(" ")
5. 结束语
那今天关于Airtest的文本输入就聊到这里,还有其他关于文本输入比较好奇的问题,欢迎同学们给我们留言~
Airtest 官网:http://airtest.netease.com/
Airtest 教程官网:https://airtest.doc.io.netease.com/
搭建企业私有云服务:https://airlab.163.com/b2b
官方答疑 Q 群:117973773
呀,这么认真都看到这里啦,帮忙点个赞或者收藏支持下我把,灰常感谢~