zoukankan      html  css  js  c++  java
  • Airtest连接Windows窗口(应用)

    基本原理

    AirtestIDE对普通Windows应用程序的测试支持,主要依靠图像识别框架(Airtest)进行位置定位,使用 pywinauto的操作接口进行模拟操作。

    在IDE中连接Windows窗口


    airtest提供了多种连接Windows应用窗口的方法,嵌入式连接和无嵌入式连接等,如果你使用嵌入式连接的方式不能正常连接待测的Windows窗口,比如出现 窗口被拉伸窗口黑屏不能正常录制脚本 等情况,你还可以选择用无嵌入式连接或桌面模式。

    一、嵌入式连接

    而嵌入式连接又分两种,一种是“选定窗口”,另外一种是“搜索窗口”。“选定窗口”的方式很简单,直接在IDE的Windows窗口连接那块面板上点击“选定窗口”,之后再把鼠标移动到待测窗口上,此时待测窗口会被一个绿色的矩形框圈住,单击鼠标左键即可把待测窗口嵌入到我们的IDE中:

    图片

    当然如果我们不使用“选定窗口”,而是使用其旁边的“搜索窗口”,IDE则会弹出一个当前所有已打开窗口的title列表,此时我们只需要找到待测窗口的title,然后点击右侧对应的 连接 按钮即可把应用窗口嵌入到我们的IDE中:

    图片

    二、无嵌入式连接

    无嵌入式连接,即 不用把应用窗口嵌入到IDE 上去,依旧可以对待测应用进行自动化测。在IDE的顶部菜单栏依次选择 选项--设置--勾选上Windows窗口无嵌入连接--OK ,之后再点击“选定窗口”,将鼠标移动到待测窗口上并单击,此时应用窗口没有被嵌入到IDE中,并且IDE的设备窗口也会自动隐藏起来。之后我们就可以像嵌入窗口那样对待测应用进行自动化测试操作:

    图片

    三、桌面模式

    假如同学们想要测试的窗口不止一个(即拥有多个不同的窗口句柄),单独 嵌入/选定 一个窗口可能无法满足测试需求,此时我们就可以使用“桌面模式”。

      

    点击桌面模式按钮,此时AirtestIDE右侧的设备窗口将会完全隐藏,进入Windows桌面模式。在此模式下,录制脚本与运行脚本都与正常情况下没有区别,只不过执行时将会对整个桌面进行截图识别,甚至可以识别到AirtestIDE代码窗口里的截图语句(因此在执行脚本时,请尽量缩小AirtestIDE的窗口,避免脚本界面里的截图干扰执行结果)。

    图片

    四、接入了poco-SDK的Windows窗口

    有一些Windows-app已经接入了Poco(例如Unity游戏窗口),我们同样能够使用AirtestIDE来方便地查看和选中UI节点。但是在使用这个功能前,需要事先告诉AirtestIDE这个Windows窗口所在位置以及窗口大小。

    在“选项”-“设置”-“Poco”,选择“Windows Content Area Rect”,框选窗口主画面后双击确认(右键/esc可取消),随后即可开始使用Poco相关功能了,如图所示:

    图片



    连接注意事项

    • 由于在选定窗口时,桌面上可能会有不少同时打开着的其他窗口,导致选择时的绿色方框不一定能够很准确地框选到被测应用,请大家在点击选定窗口按钮之前,尽可能先把所有其他无关窗口都最小化,这样做可以让窗口选择更准确。
    • 为了防止出现异常情况,请不要选择自己的桌面、AirtestIDE软件本体。因为窗口嵌入的功能原理是,将一个Windows窗口设置为IDE的子窗口,因此如果试图连接桌面,可能会导致无法预料的异常情况发生。如果只是想测试桌面上的所有窗口,可以选择我们的桌面模式来录制脚本。

    • 由于Windows窗口在截图时需要记录分辨率,因此把窗口嵌入到IDE后大小将会被固定,无法修改。如果觉得嵌入后窗口过大,可以在嵌入之前先将窗口调整至合适大小再进行嵌入。

    退出Windows连接

    • 直接关闭AirtestIDE即可退出本次Windows连接,并将先前嵌入的窗口自动弹出
    • 也可以通过右上角的Disconnect current device按钮来退出窗口连接

    用代码连接Windows窗口

    使用窗口句柄

    在AirtestIDE里连接的窗口,都是用窗口句柄连接的。窗口句柄是每个Windows窗口对象拥有的独一无二的32位无符号整数,而且每次打开窗口,句柄的数值都会变化。这就意味着,假如我们用某个窗口嵌入到AirtestIDE里写出了一个脚本,虽然这次可以直接运行,但是通过复制AirtestIDE里的脚本命令行的方式,是无法保证下一次还能够运行的。因为AirtestIDE里的命令行,将会有这样的参数内容 --device Windows:///句柄,而下次再打开窗口,可能句柄已经发生了变化。

    使用句柄连接窗口的脚本我们可以这么写:

    auto_setup(__file__,devices=["Windows:///133194"])

    但是该连接脚本仅对本次打开的Windows窗口有效,如果Windows窗口被关闭后重新打开,句柄也将会发生变化,该脚本失效。

    使用正则表达式

    上文我们提到,使用“搜索窗口”连接窗口的时候,IDE会列出当前所有打开窗口的title,我们可以 写一个正则表达式去匹配到待测窗口的title ,并使用这个正则表达式来连接该窗口:

    # 例如匹配“吹梦到西洲”后面跟着换行符以外的任意字符的窗口title
    auto_setup(__file__,devices=["Windows:///?title_re=吹梦到西洲.*"])
    图片

    大多数情况下,窗口的title比较不容易变化,所以使用正则表达式匹配窗口title来连接待测窗口的脚本,会相对稳定些。

    连接整个桌面

    如果不需要置顶某个窗口应用的话,我们还可以使用如下代码直接连接整个桌面来做自动化:

    auto_setup(__file__,devices=["Windows:///"])


    ---------------------------------------------------------------------------------

    关注微信公众号即可在手机上查阅,并可接收更多测试分享~

     
  • 相关阅读:
    integer to roman
    String to Integer (atoi)
    zigzag conversion
    Longest Palindromic Substring(最长回文子串)
    Longest Substring Without Repeating Characters
    letter combinations of a phone number(回溯)
    remove Nth Node from linked list从链表中删除倒数第n个元素
    generate parentheses(生成括号)
    排序算法入门之堆排序(Java实现)
    Integer 和int 比较
  • 原文地址:https://www.cnblogs.com/songzhenhua/p/14827583.html
Copyright © 2011-2022 走看看