手把手教你学会文本输入的text()接口

简介: 手把手教你学会文本输入的text()接口

前言



编写测试脚本的过程中,我们会经常遇到需要输入文本的情况。不论是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()接口来输入内容



如图,在这个脚本里先点击了需要输入的位置,然后调用了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等)的某些型号手机限制了密码框的输入,强制在输入密码时必须使用 系统键盘输入 。这样会导致需要输入密码时,直接使用airtesttext()会无法输入内容,需要把以下选项打开后才能正常输入密码内容:



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()接口。

相关文章
|
达摩院 Java 测试技术
最新迭代|FunASR离线文件转写软件包2.0
最新迭代|FunASR离线文件转写软件包2.0
1164 0
|
关系型数据库 MySQL Linux
在Linux中,如何配置数据库服务器(如MySQL或PostgreSQL)?
在Linux中,如何配置数据库服务器(如MySQL或PostgreSQL)?
|
8月前
|
负载均衡 JavaScript 前端开发
分片上传技术全解析:原理、优势与应用(含简单实现源码)
分片上传通过将大文件分割成多个小的片段或块,然后并行或顺序地上传这些片段,从而提高上传效率和可靠性,特别适用于大文件的上传场景,尤其是在网络环境不佳时,分片上传能有效提高上传体验。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
网络协议 网络架构
ensp中默认路由和静态路由实验
默认路由的作用是将无法匹配路由表中其他路由表项的数据包转发到指定下一跳路由器。在实际网络中,默认路由通常用于简化路由配置,通常在网络边缘的路由器上配置 静态路由的作用是将特定网络的数据包转发到指定下一跳路由器。在实际网络中,静态路由通常用于更精细地控制数据包的转发,通常在网络核心路由器上配置。
702 6
ensp中默认路由和静态路由实验
|
Java 数据安全/隐私保护
SpringBoot【集成Thumbnailator】Google开源图片工具缩放+区域裁剪+水印+旋转+保持比例等(保姆级教程含源代码)
SpringBoot【集成Thumbnailator】Google开源图片工具缩放+区域裁剪+水印+旋转+保持比例等(保姆级教程含源代码)
667 0
|
敏捷开发 测试技术 持续交付
几个有用的测试网站
几个有用的测试网站
1502 0
|
测试技术 Python
App自动化测试中,如何更好地处理弹窗?
在App自动化测试中,处理弹窗异常是保证测试稳定性和可靠性的重要环节。当遇到广告弹窗、升级提示等不定时出现的UI元素时,可以采用黑名单处理方法,如上述Python代码示例,通过尝试点击黑名单中的元素来避免干扰。同时,利用异常处理装饰器可以增强函数功能,保持代码整洁,当异常发生时记录日志、截图并保存页面源代码,便于问题排查。这两种策略能有效提升测试的效率和质量。
|
存储 Ubuntu Linux
linux系统中如何制作rootfs?详细教程
linux系统中如何制作rootfs?详细教程
442 0
|
网络协议 中间件 Unix
字节赫兹 框架教程 一 Engine
字节赫兹 框架教程 一 Engine
354 0
|
存储 数据采集 分布式计算
大数据数据采集的数据迁移(同步/传输)的Sqoop之数据传输实战
在大数据领域,数据迁移(同步/传输)也是非常重要的一环。Sqoop作为一个开源的数据迁移工具,可以帮助我们轻松地实现关系型数据库与Hadoop之间的数据迁移。本文将介绍如何使用Sqoop进行数据传输实战。
1025 0
下一篇
oss云网关配置