# 1.4 测试Windows应用程序 本教程主要讲解如何使用AirtestIDE进行Windows应用程序的自动化测试(以网易云音乐Windows版为案例)。 **本文约1000字,阅读全文可能将花费3分钟**。 ## 1. 基本原理 AirtestIDE对普通Windows应用程序的测试支持,主要依靠图像识别框架(Airtest)进行位置定位,使用 [pywinauto](http://pywinauto.readthedocs.io/en/latest/index.html)的操作接口进行模拟操作。 ![Windows原理图](4_get_started_with_Windows_test/1_windows_framework.png) ## 2. Windows窗口连接 要测试某个Windows程序,首先AirtestIDE需要选定测试对象,这个过程也可以理解为待测试的Windows窗口连接。 选定测试窗口后,AirtestIDE在执行测试时会主动把连接的测试窗口置于桌面窗口层叠顺序(Z-order)的最上方,进而执行对应窗口的测试操作。值得一提的是,我们是通过窗口句柄来进行的窗口选定,在选定窗口后,脚本运行时也会指定特定的窗口句柄,所以在窗口选定后请不要随意关闭对应窗口,否则运行时无法找到对应句柄的窗口会导致报错。 ### **①常规连接方法** AirtestIDE提供了一键嵌入Windows窗口的功能。如下所示: ![1-](4_get_started_with_Windows_test/2_default_embed.gif) 为了提高脚本撰写效率,AirtestIDE在进行Windows窗口连接时,默认会把窗口嵌入到设备窗内。(可以通过快捷入口断开连接、解除嵌入状态。) ### **②备用嵌入方法** 对于某些较为特殊的窗口,常规嵌入AirtestIDE时可能出现异常(比如嵌入失败、嵌入后鼠标交互失效等),可以勾选“设置”-“Device”-“Windows Embed Backup Method”(使用Windows备用连接方式),进而实现窗口的不嵌入连接。 ![2-](4_get_started_with_Windows_test/3_backup_embed.gif) ### **③桌面模式**  如果是想对于整个桌面进行测试,AirtestIDE还提供了桌面模式的快捷入口。 ![airtestide-desktop-demo](4_get_started_with_Windows_test/4_desktop_mode.gif) ## 3. 生产Airtest脚本 在完成Windows窗口嵌入后,就开始生产测试脚本了。 ### 生成测试脚本 ![3-](4_get_started_with_Windows_test/5_gen_script.gif) **操作注意事项:** - 截图时请尽量少用“自动截图”![自动截图图标](https://user-images.githubusercontent.com/8188879/42209576-96a33f3c-7ee1-11e8-95b2-2b47e7c90924.png),它会根据操作位置的图像内容自适应截图尺寸,有可能会导致脚本的返工。 - 在执行```touch``` / ```wait``` / ```exists``` / ```assert_exists``` / ```assert_not_exists```等主动截图的操作时,在完成截图区域框选后: - 鼠标双击完成截图; - 右键重新开始截图区域框选; - Esc按钮退出本次截图操作。 - 在执行手动 ```swipe``` 截图时,在完成截图区域框选后,单击滑动终点完成语句录制。 - 使用```text()```输入时,底层调用为```pywinauto.keyboard.SendKeys```,有组合键等特殊输入需求时请[查看文档](https://pywinauto.readthedocs.io/en/latest/code/pywinauto.keyboard.html)。 ### 运行脚本、查看报告 ![4-运行脚本](4_get_started_with_Windows_test/6_run_script.gif) ![5-查看报告](4_get_started_with_Windows_test/7_view_report.gif) 在测试脚本运行结束后,通过一键生成报告进行执行步骤的查看。如果有脚本运行错误,也可以根据报告定位错误原因。 ## 4. 其他功能 - **已嵌入Poco-SDK的游戏窗口测试(文档在路上)** - **如果窗口存在关闭可能,可以考虑通过窗口名进行测试窗口定位(文档在路上)**