• Airtest之测试Windows应用程序


    之前已经介绍过如何连接Windows窗口:Airtest连接Windows窗口(应用)

    在成功连接上Windows窗口后,就相当于我们已经连接上了一台设备,接下来可以对它进行脚本的录制与回放了。

    生成截图语句

    首先,touch / wait / exists / assert_exists / assert_not_exists等Airtest带有截图的语句,与在Android/iOS设备上录制并没有太大区别:

    图片

    但是需要注意的是,在使用鼠标拖拽框选好想要截图的位置后,需要双击该截图区域才能完成截图,而不会在鼠标松开时自动完成截图,这也是Windows下截图的最大区别。

    因此截图的步骤是:

    • 拖动鼠标框选合适的区域

    • 双击鼠标完成截图

    • 点击鼠标右键可以重新进行框选

    • Esc按钮可以退出本次截图操作

    以及,在录制swipe语句时,在完成截图区域框选后,需要单击滑动终点完成语句录制。

    调用Windows接口

    和Android/iOS一样,Airtest也对Windows下的常用操作进行了封装,底层操作接口使用的是pywinauto库。

    因此,在编写Windows应用的测试脚本时,我们可能需要查阅以下几个API文档:

    • Airtest的跨平台API,这里的所有API都可以在脚本里直接调用

    • Airtest的Windows专属API,请查阅后面提供的代码示例来了解如何调用Windows设备的专属接口

    • 如果需要更复杂的操作,可能需要查阅pywinauto提供的API

    一个简单的示例

    为了方便演示,我们假设这个脚本没有在命令行中传入参数,而是在脚本里使用connect_device接口来连上一个句柄为123456的窗口,并对它进行一些操作:

    from airtest.core.api import *
    dev = connect_device("Windows:///123456")
    # 通用的接口调用方式,与其他平台相同:
    touch(图片)

    假如我们希望能够调用一些Windows的专属操作,比如查阅了Airtest的Windows专属API文档后,我们发现有一些操作是只有Windows窗口才有的:

    # 调用Windows专属的接口,例如获取当前窗口的标题内容
    print(dev.get_title())
    # 把窗口移动到某个坐标位置
    dev.move((100, 200))

    接下来,假设我们现在想要使用鼠标滚轮,在查阅Airtest的API后发现,Airtest的Windows模块并没有封装鼠标滚轮的功能,此时我们可以进一步查询pywinauto的文档,寻找到mouse相关的章节后,就知道如何调用鼠标滚轮接口了:

    dev.mouse.scroll(coords=(80, 100), wheel_dist=1)

    pywinauto.mouse这个模块里,还提供了很多常用的鼠标操作的方法:

    # 鼠标点击操作,可以修改coords来指定点击位置
    pywinauto.mouse.click(button='left', coords=(0, 0))
    # 鼠标双击操作,可以修改coords来指定双击位置
    pywinauto.mouse.double_click(button='left', coords=(0, 0))
    # 移动鼠标,可以修改coords使鼠标移动到指定位置
    pywinauto.mouse.move(coords=(0, 0))
    # 鼠标右键点击,可以修改coords来指定右键点击位置
    pywinauto.mouse.right_click(coords=(0, 0))
    # 鼠标滚动操作,可以修改coords来指定滚动位置,修改wheel_dist来指定滚动距离
    pywinauto.mouse.scroll(coords=(0, 0), wheel_dist=1)


    输入keyevent

    在Android中,我们可以通过keyevent("HOME")来实现按下HOME键的操作,而在Windows中,我们同样可以通过keyevent接口发送一些按键响应。Android的按键码是基于ADB的,而Airtest的Windows模块则封装使用了pywinauto支持的按键码,请查阅pywinauto.keyboard文档内容来编写Windows下的keyevent接口参数:

    # 在pywinauto中,符号^也代表了CTRL键,因此^a即为全选(Ctrl+A)
    keyevent("^a")
    # 例如这是删除键的输入方式,需要加上括号{}
    keyevent("{DELETE}")

    注意,这里的keyname需要用""括起来。更多keyname可以参考下图:

     


    如何在连接脚本时,指定连接某个窗口

    在AirtestIDE的Windows模式中,运行脚本和查看报告与其他平台并无不同:

    图片

    然而,最需要注意的一点是:在AirtestIDE里连接的窗口,都是用窗口句柄连接的。窗口句柄是每个Windows窗口对象拥有的独一无二的32位无符号整数,而且每次打开窗口,这个数值都会变化。

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

    因此,我们也可以不使用句柄,而是通过其他的方式来连接窗口。Airtest的Windows模块,使用了pywinauto的connect接口来连接窗口,因此除了句柄以外,我们可以通过窗口标题来连接:

    # 连接一个Windows窗口,窗口句柄为123456
    Windows:///123456
    # 连接一个Windows窗口,窗口名称匹配某个正则表达式
    Windows:///?title_re=Unity.*
    # 连接windows桌面,不指定任何窗口,对应IDE的桌面模式
    Windows:///

    在命令行中假如想使用窗口名称连接,不需要添加引号等符号,直接这样写:

    airtest run test.air --device Windows:///?title_re=Unity.

  • 相关阅读:
    单例
    Label自适应高度
    通知中心(以夜间模式为例)
    ios VFL屏幕自适应
    网络请求数据(同步POST,异步POST)
    linux 设备文件
    linux 文件存取 软硬联接的区别
    linux 磁盘管理与文件系统
    linux开机过程
    Build Antlr4 projects with eclipse java project template.
  • 原文地址:https://www.cnblogs.com/songzhenhua/p/15315117.html
Copyright © 2020-2023  润新知