此文章来源于项目官方公众号:“AirtestProject”
版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途
一般情况下,在我们用 Airtest 连接 Android 设备(真机或模拟器)的时候,Yosemite.apk
就会被自动安装到我们的设备上。当程序执行到输入语句时,也会启用 Yosemite
输入法来进入输入操作。
但很多新手同学对于这个 Yosemite.apk
还不是那么熟悉,我们官网上也没有详细的文档对它进行介绍。所以今天我们总结了 6 点同学们常问的、关于 Yosemite
的知识点,希望能让同学们更加了解这个应用的功能作用以及常见问题。
很多同学刚刚用 Airtest 做输入操作的时候,会发现安卓设备上的键盘都不能弹出来了,效果如图:
其实,Yosemite
是 Airtest 项目专门为安卓设备准备的输入法,它本身就是不带软键盘的,使用时只会在设备底部出现一个简单的提示。并且只要在脚本中使用了 text()
接口,程序默认就会调用该输入法来进行输入操作。
用 Airtest 连接上我们的设备之后,当前输入法一般就被设置成了 Yosemite
输入法。但有时候我们想要进行手动输入,就需要我们切换成别的输入法了。
如果使用了 IDE,我们可以在设备窗口的右上角打开 安卓手机助手 ,然后在安卓助手中快速切换输入法,再进行手动输入:
如果同学们没有使用 IDE,也可以在手机设置中找到输入法设置,然后将当前输入法切换成 Yosemite
以外的输入法即可。
在脚本中,如果想要实现文字输入,一般需要这样的流程:
① 点一下你需要输入的位置,激活输入光标
② 调用 Airtest 的 text()
接口来输入内容
部分品牌的手机默认会阻止通过 USB 安装应用,这样就会导致在初始化设备的时候,不能自动安装上 Yosemite
等 apk,最终使 Airtest 连不上手机。除此之外,手机的当前输入法不是 Yosemite
,也可能影响设备连接或者脚本运行。
(Airtest 连接未装上 Yosemite 的模拟器报错如图)
所以连接失败/报错时,我们也需要检查下 Yosemite
等 apk 是否已经安装在设备上,并把它设置为当前输入法。尤其是很多模拟器,初始化时并不会自动安装 Yosemite
,所以我们在连接安卓模拟器时,一般建议先手动安装上 Yosemite.apk
。
如果 text()
接口输入失败,一种情况是手机阻止了 Yosemite.apk
的安装及运行,这时候只要手动安装上即可。另一种常见情况是部分型号的手机不允许在输入密码时调用第三方输入法,这时候可以检查手机设置中的 语言与输入法-安全输入
、安全键盘
之类的设置是不是打开的,取消这些选项之后,就可以使用非系统自带的输入法来输入密码了。
另外,有部分特殊型号的手机存在不兼容的情况,在使用 Yosemite
输入法时容易失败,无法输入文字(OPPO 与 Vivo 品牌更容易出现)。假如没有输入中文的需求,可以尝试使用 adb shell input
指令来进行文字输入:
shell("input text 'hello world'")
同时,上面这种 adb shell input
可以直接设置为默认的输入方式,替换原先的 Yosemite
输入,例如这样在 python 代码中这样初始化手机:
from airtest.core.api import *
# 相当于命令行中使用 --device Android:///?ime_method=ADBIME 连接手机
init_device("Android", ime_method="ADBIME")
text("hello")
还有部分模拟器(例如夜神模拟器)在输入时可能无法成功,可以确认下设置中是否打开了 硬件-物理键盘
,尝试关闭这个选项,并设置默认输入法为 yosemite
输入法后,再次重试即可。
在官网上下载一个最新的 IDE 包,解压出来,在下述路径中可以找到 Yosemite.apk
:
同理,如果需要手动安装 pocoservice-debug.apk
等,也可以在 IDE 的解压文件中找到:
1.1.3 和 1.1.4 版本的 Airtest 的录屏功能也是由 Yosemite.apk
完成的。很多同学在新的测试机使用录屏功能的时候,往往会出现录屏失败报错等情况。这是因为初次使用录屏功能时,需要手动打开设备上的 Yosemite
应用,允许 Yosemite
截取设备的屏幕内容,如果未在下述弹窗中允许截图,将很容易导致录屏失败:
所以同学们在遇到录屏失败时,请确保已经在 Yosemite
上允许了截取功能。另外部分模拟器(eg:夜神模拟器)不支持这种录屏方式,同学们可以尝试更换别的模拟器。
如需要在脚本中开启录屏功能,可以使用 start_recording()
接口,结束录屏时调用 stop_recording()
接口即可:
Airtest 官网:airtest.netease.com/
Airtest 教程官网:airtest.doc.io.netease.com/
搭建企业私有云服务:airlab.163.com/b2b