如何在各大平台下“模拟输入空格”

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

呀,这么认真都看到这里啦,帮忙点个推荐支持一下呗,灰常感谢~

posted @ 2021-12-09 09:36  AirtestProject  阅读(564)  评论(0编辑  收藏  举报