Airtest 文本输入的 text () 接口和 set_text () 接口解析

fishfish-yu · November 08, 2019 · 242 hits

注:我们的Airtest官方公众号(AirtestProject)会持续更新大家对于Airtest感兴趣的问题,欢迎有需要的同学关注并查看我们更多的内容。
如想向我们反馈关于AirtestProject想了解的问题,欢迎到公众号后台留言

前言

编写测试脚本的过程中,我们会经常遇到需要输入文本的情况。不论是Airtest还是poco,都给我们提供了对应的接口来实现文本输入的功能。当然,很多同学也跟我们反馈了一些在文本输入过程中遇到的问题,所以下文,我们将围绕以下几点来向大家讲述如何进行文本输入以及如何解决文本输入的常见问题:

  1. Airtest中的text()接口介绍
  2. 1个使用text()接口的例子
  3. 使用text()接口的常见问题
  4. poco中的set_text接口介绍

Airtest中的text()接口介绍

text()接口是Airtest中的文字输入接口,它能实现在目标设备上输入文本的功能,但是文本框需要处于激活状态。text()接口支持的平台有:AndroidIOSWindows。它包含以下参数:

  • text – 要输入的文本,例如:
    text("hello")
  • enter – 是否在输入完毕后,执行一次Enter(回车键),相当于keyevent("ENTER") ,默认是True;如果仅是想输入文字,而不执行Enter(回车键),则可以传入False进去:
    text("hello",enter=False) 值得注意的是,不同平台下的text()接口,会存在一些差异:
Android平台下

Android平台下的text()接口,除了上述俩个参数以外,还有另一个参数search

  • search – 是否要按下输入法键盘中的search键,默认为False;部分输入框,需要在输入内容后,点击输入键盘中的search键才能够激活搜索操作,我们传入True即可:
    text("hello",search=True)
IOS平台下

IOS平台下的text()接口,传入要输入的文本text时,会默认给text加上一个换行符\n

1个使用text()接口的例子

我们在使用text接口时,一般是这样的流程:

  1. 点一下你需要输入的位置,激活输入光标;
  2. 调用text()接口来输入内容

image

如图,在这个脚本里先点击了需要输入的位置,然后调用了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输入法后再次重试即可。

image

如果依然失败(物理键盘选项被不断自动重置),可以打开右上角的模拟器设置,勾选软键盘选项后重试:

image

如果依然无法输入,可以考虑换用poco来输入,或是直接使用上述的adb指令输入英文内容。

无法在密码框中输入密码

部分厂商(例如华为、VIVO等)的某些型号手机限制了密码框的输入,强制在输入密码时必须使用 系统键盘输入 。这样会导致需要输入密码时,直接使用airtesttext()会无法输入内容,需要把以下选项打开后才能正常输入密码内容:

image

poco中的set_text接口介绍

poco中提供了一个set_text接口来实现文本输入的功能。这个接口无需调用输入法,可以直接设置文字。但是指定的控件必须是一个可输入的控件,例如在Android中,是一个 EditText 类型的widget

poco("com.android.mms:id/recipients_editor").set_text("hello")

另外,set_text接口只会输入文本,而并不会像text()接口一样,默认还会执行一次回车键enter

我们建议各位如果项目已经接入了poco,可以多尝试使用pocoset_text来设置文字内容,如果无法输入(部分机型、部分输入框有可能不支持set_text接口),再尝试用Airtesttext()接口。
最后,如果大家对Airtest有疑问、BUG、建议,请到https://github.com/AirtestProject/AirtestIDE/issues 发布issue,我们会有专人解答。同时,我们还提供了官方QQ群给大家沟通交流,目前1群已满,欢迎大家加入2群:

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