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


    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

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

  • 相关阅读:
    NuGet学习笔记(2) 使用图形化界面打包自己的类库
    NuGet学习笔记(1) 初识NuGet及快速安装使用
    LINQ标准查询操作符(一)——select、SelectMany、Where、OrderBy、OrderByDescending、ThenBy、ThenByDescending和Reverse
    LINQ标准查询操作符(二)——Join、GroupJoin、GroupBy、Concat、
    LINQ标准查询操作符(三)——Aggregate、Average、Distinct、Except、Intersect、Union、Empty、DefaultIfEmpty、Range、Repeat
    LINQ标准查询操作符(四)—AsEnumerable,Cast,OfType,ToArray,ToDictionary,ToList,ToLookup,First,Last,ElementAt
    (转)你的软件研发质量管理是什么仙级?
    (转)App测试流程及测试点(个人整理版)
    (转)APP功能测试要领
    (转)APP功能测试点汇总
  • 原文地址:https://www.cnblogs.com/AirtestProject/p/15660768.html
Copyright © 2020-2023  润新知