注:我们的 Airtest 官方公众号(AirtestProject)会持续更新大家对于 Airtest 感兴趣的问题,欢迎有需要的同学关注并查看我们更多的内容。
如想向我们反馈关于 AirtestProject 想了解的问题,欢迎到公众号后台留言
编写测试脚本的过程中,我们会经常遇到需要输入文本的情况。不论是Airtest
还是poco
,都给我们提供了对应的接口来实现文本输入的功能。当然,很多同学也跟我们反馈了一些在文本输入过程中遇到的问题,所以下文,我们将围绕以下几点来向大家讲述如何进行文本输入以及如何解决文本输入的常见问题:
Airtest
中的text()
接口介绍text()
接口的例子text()
接口的常见问题poco
中的set_text
接口介绍Airtest
中的text()
接口介绍text()
接口是Airtest
中的文字输入接口,它能实现在目标设备上输入文本的功能,但是文本框需要处于激活状态。text()
接口支持的平台有:Android
、IOS
和Windows
。它包含以下参数:
text
– 要输入的文本,例如:
text("hello")
enter
– 是否在输入完毕后,执行一次Enter
(回车键),相当于keyevent("ENTER")
,默认是True
;如果仅是想输入文字,而不执行Enter
(回车键),则可以传入False
进去:
text("hello",enter=False)
值得注意的是,不同平台下的text()
接口,会存在一些差异:Android 平台下的text()
接口,除了上述俩个参数以外,还有另一个参数search
:
search
– 是否要按下输入法键盘中的search
键,默认为False
;部分输入框,需要在输入内容后,点击输入键盘中的search
键才能够激活搜索操作,我们传入True
即可:
text("hello",search=True)
IOS 平台下的text()
接口,传入要输入的文本text
时,会默认给text
加上一个换行符\n
。
text()
接口的例子我们在使用text
接口时,一般是这样的流程:
text()
接口来输入内容
如图,在这个脚本里先点击了需要输入的位置,然后调用了text()
接口进行输入,在运行时手机将会自动被安装一个名为 yosemite.apk
的应用,然后启用 yosemite
输入法来进行输入。
而且需要注意的是,在使用过text()
接口后,手机输入法会被切换为yosemite
输入法,因此看不到正常键盘了(无需惊慌)。如果需要手工输入,可以在系统的输入法设置中,把输入法切换回系统输入法即可恢复。同时我们也提供了 安卓手机助手功能 ,在手机助手中可以简单地点击鼠标来切换输入法。(可在公众号菜单中找到我们的官网教程查看安卓手机助手功能)
text()
接口的常见问题如果 text()
接口输入失败,请查看是否手机阻止了yosemite.apk
的安装及运行,该 apk 安装成功以后,手机上会出现如下的图标:
部分手机的兼容性问题也会导致text()
接口输入失败,具体可以查阅官网教程中 “Android 连接 FAQ” 小结的内容。 另外我们也可以尝试将 yosemite
输入法 设置为手机默认输入法,然后再进行 text()
接口的调用,可以避免部分输入失败的问题。
有部分特殊型号的手机,可能在使用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
输入法的常见问题有很多同学会问到关于Yosemite
输入法的问题,在这里我们统一解释下:
1.Yosemite
输入法是没有按键页面的,只通过ide
输入文本,该输入法成功安装以后,设备页面下方的显示如图,是正确的:
2.当Airtest
断开设备的连接之后,设备当前的输入法还是Yosemite
,我们可以找到手机设置-更多设置-语言与输入法
(不同型号手机修改输入法的位置可能有一些差别),然后将当前输入法改成你平时使用的输入法即可。
部分模拟器(例如夜神模拟器)在输入时无法成功,可能因为默认使用键盘输入,因此无法调用yosemite
输入法,导致 text()
接口无法输入文字。首先我们可以尝试确认设置中是否打开了硬件-物理键盘
,尝试关闭这个选项,并设置默认输入法为yosemite
输入法后再次重试即可。
如果依然失败(物理键盘选项被不断自动重置),可以打开右上角的模拟器设置,勾选软键盘选项后重试:
如果依然无法输入,可以考虑换用poco
来输入,或是直接使用上述的adb
指令输入英文内容。
部分厂商(例如华为、VIVO 等)的某些型号手机限制了密码框的输入,强制在输入密码时必须使用 系统键盘输入 。这样会导致需要输入密码时,直接使用airtest
的text()
会无法输入内容,需要把以下选项打开后才能正常输入密码内容:
poco
中的set_text
接口介绍poco
中提供了一个set_text
接口来实现文本输入的功能。这个接口无需调用输入法,可以直接设置文字。但是指定的控件必须是一个可输入的控件,例如在Android
中,是一个 EditText
类型的widget
:
poco("com.android.mms:id/recipients_editor").set_text("hello")
另外,set_text
接口只会输入文本,而并不会像text()
接口一样,默认还会执行一次回车键enter
。
我们建议各位如果项目已经接入了poco
,可以多尝试使用poco
的set_text
来设置文字内容,如果无法输入(部分机型、部分输入框有可能不支持set_text
接口),再尝试用Airtest
的text()
接口。
最后,如果大家对 Airtest 有疑问、BUG、建议,请到https://github.com/AirtestProject/AirtestIDE/issues 发布 issue,我们会有专人解答。同时,我们还提供了官方 QQ 群给大家沟通交流,目前 1 群已满,欢迎大家加入 2 群: