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

fishfish-yu · 2021年12月08日 · 1766 次阅读

此文章来源于项目官方公众号:“AirtestProject”
版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途

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

呀~这么认真都看到这里啦,帮忙点击左下角的爱心,给我点个赞支持一下把,灰常感谢~

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册