如何在各大平台下“模拟输入空格”
1. 前言
Airtest和Poco自动化框架分别提供了 text
接口和 set_text
接口帮助我们 实现文本输入的操作 。
但部分特殊字符,比如同学们经常问到的空格,使用这两个接口并不一定完全能满足我们的期望,所以下文我们将详细介绍这两个关于文本输入的接口,并介绍我们该如何 在各大平台下模拟输入空格 。
2. 输入文本的接口介绍
1)Airtest的text接口
在Airtest API文档中查看我们的 text
接口,可以获取以下信息:
text
接口是一个跨平台的接口,支持Android、Windows和iOS平台。
① 输入前激活文本输入框
在文本框使用 text
进行输入操作之前,我们必须激活文本框,也就是我们通常在输入操作之前,会点击一下文本框,使输入光标激活在文本框内:
# 点击激活文本框,也可以是touch操作
poco("SearchField").click()
# 输入文本
text("网易 云音乐",enter=False)
② 输入后的回车操作
text
接口默认情况下,会在输入完毕后执行一次回车(ENTER)操作。在Android平台下,回车的表现可能是搜索操作;在iOS平台下,回车的表现可能是换行操作......
如果同学们不需要在输入完毕后执行回车动作,可以设置 enter=False
:
text("message",enter=False)
③ 输入后的搜索操作
部分Android的搜索输入框,在执行文本输入之后,需要点击键盘的搜索按钮才能触发搜索的动作,所以在Android平台下,我们的 text
接口新增了1个参数 search
,用于支持这种情况:
text("test", search=True)
2)Poco的set_text接口
在Poco API文档中查看 set_text
接口,我们可以知道它可以用来设置控件的文本属性。
比如我们使用 set_text
接口,给某个文本输入框设置了文本属性,则达到了输入文本的目的。使用这个输入文本还有一个好处,就是我们使用 poco("文本框").set_text(" ")
就能快速清空文本框的内容。
3)关于选择text还是set_text进行输入
我们只需要记住一点:文本框支持哪个输入,我们就选择哪个接口。因为平台和文本框的多样化,我们很难保证 text
接口能完全支持所有的输入框,同理,set_text
也是如此。
当我们在某个文本框,使用 text
接口无法输入时,我们可以看看能否使用Poco的 set_text
接口,可以的话,我们就尝试更换成 set_text
来执行文本输入操作。
但有一点,如果文本框支持Poco的 set_text
,并且我们需要执行清空文本框的内容,这时我们使用 set_text
的置空,将非常方便快捷:
poco("文本框").set_text(" ")
3. 在Android平台下输入空格
Airtest和Poco框架都支持Android原生应用,所以我们支持使用 text
或者 set_text
接口来输入文本和空格:
# text输入
text("薛之谦 天外来物")
sleep(1.0)
# 删除
for i in range(10):
keyevent("67")
# set_text输入
poco("com.netease.cloudmusic:id/search_src_text").set_text("薛之谦 天外来物")
sleep(1.0)
# set_text置空
poco("com.netease.cloudmusic:id/search_src_text").set_text(" ")
4. 在iOS平台下输入空格
理论上,Airtest和Poco都支持iOS原生应用,我们可以使用 text
接口和 set_text
接口来进行输入操作;但是因为大部分iOS的输入框都不支持直接设置text属性,所以在iOS平台下,我们还是常用Airtest的 text
接口来输入文本和空格:
# text输入
text("网易 云音乐",enter=False)
sleep(1.0)
# 删除
for i in range(10):
text("\b",enter=False)
5. 在Windows平台下输入空格
在上文中我们已经知道,text
是跨平台的API,支持Windows平台;但Poco暂时还不支持Windows窗口(除了已经接入Poco-SDK的游戏窗口)。
所以我们优先选择使用Airtest的 text
接口在Windows平台下输入空格,尝试如下:
# 中文输入
text("薛之谦 天外来物")
for i in range(10):
keyevent("{BACK}")
# 纯英文输入
text("Love Story")
发现这样并不会按照预期输入我们想要的空格,所以我们需要尝试别的方法,比如利用Windows平台下的 keyevent
键码:
# 中文输入
text("薛之谦",enter=False)
keyevent("{VK_SPACE}")
text("天外来物")
sleep(1.0)
for i in range(10):
keyevent("{BACK}")
# 纯英文输入
text("Love{VK_SPACE}Story")
可以看到效果符合我们的预期,更多Windows平台下的keyevent键码,我们可以参考 pywinauto.keyboard
模块的内容:https://pywinauto.readthedocs.io/en/latest/code/pywinauto.keyboard.html 。
6. 小结
简单回顾下,在Android和iOS平台下,我们给 text
或者 set_text
接口传入的字符串带空格,接口会按照预期帮我们输入这个空格;但在Windows平台下,我们就需要借助keyevent键码 "{VK_SPACE}"
来帮助我们输入空格。
如有其它问题,同学们可以直接反馈到我们项目的issue收集网页上:https://airtest.netease.com/issue_create 。
Airtest官网:https://airtest.netease.com/
Airtest教程官网:https://airtest.doc.io.netease.com/
搭建企业私有云服务:https://airlab.163.com/b2b
官方答疑 Q 群:654700783
呀,这么认真都看到这里啦,帮忙点个推荐支持一下呗,灰常感谢~