06如何连接Windows窗口
同学们好,我是网易AirtestProject的团队成员晓娟,欢迎大家来到我们的视频教程专栏《14天Airtest自动化测试小白课程》。
今天我们带大家学习一下“设备连接”章节的最后一部分内容:如何连接Windows窗口。这节课我们主要讲一下如何在IDE中连接Windows应用窗口、Windows窗口连接的常见问题以及如何在脚本中连接Windows窗口。
在IDE中连接Windows应用窗口
先来看下如何在IDE中连接Windows窗口。其实在IDE中连接Windows窗口,我们既可以把窗口嵌入到IDE中去,也可以不把窗口嵌入到IDE中。
① 窗口嵌入IDE
方式一:选定窗口
为防止其它应用窗口对待测窗口产生不必要的影响,在连接Windows窗口之前,我们只需要在桌面上留下IDE窗口和待测应用的窗口即可
调整待测应用窗口到合适大小,嵌入之后应用窗口的大小不能改变
点击 “选定窗口” 按钮,之后随着鼠标移动,将会有一个绿色细线框实时框选出鼠标位置对应的应用窗口
待绿色细线框移动到目标窗口后,鼠标左键点击完成嵌入

方式二:搜索窗口
点击 “搜索窗口” 按钮,在弹出的应用窗口列表中,找到待测应用窗口的title
点击应用title后面对应的 “连接” 按钮,即可完成嵌入

② 窗口不嵌入IDE
方式三:无嵌入连接
上面介绍的2种连接方式,都需要把Windows的应用窗口嵌入到IDE中,然后再进行自动化测试,而无嵌入连接,无需将应用的窗口嵌入到IDE中,也可以对窗口进行自动化操作。
我们在IDE的顶部菜单栏中,依次打开选项--设置,在Device部分勾选上 “Windows窗口无嵌入连接” ,然后回到Windows窗口连接的面板,点击选定窗口,移动鼠标,待绿色线框移动到待测应用窗口后,单击鼠标左键确认,此时IDE最右侧的设备窗口会被隐藏,我们就可以对待测应用进行自动化测试操作了。

方式四:桌面模式
假如同学们想要测试的窗口不止一个(拥有多个不同的窗口句柄),那么单独嵌入一个窗口可能就无法满足测试需求,所以我们也提供了第四种方案:桌面模式。

点击桌面模式按钮,此时AirtestIDE右侧的设备窗口将会完全隐藏,进入Windows桌面模式。

在此模式下,录制脚本与运行脚本都与正常情况下没有区别,只不过执行时将会对整个桌面进行截图识别,甚至可以识别到AirtestIDE代码窗口里的截图语句(因此在执行脚本时,请尽量缩小AirtestIDE的窗口,避免脚本界面里的截图干扰执行结果)。
Windows窗口连接的常见问题
了解完4种窗口的连接方式后,我们来看看在窗口的连接过程中,我们容易遇到什么问题
① 不能正常嵌入IDE
因为桌面应用的实现方式各有不同,所以当我们尝试在IDE种嵌入窗口的时候,就可能会出现窗口无法正常嵌入的情况,比如:嵌入时IDE报错、无法点击应用、窗口被严重拉伸、窗口黑屏、窗口显示不全等等。
这时候我们就需要换一种连接方式来连接我们的待测窗口,上面四种方式都可以尝试下,直到我们可以正常操作待测应用即可。
② Windows窗口嵌入后无法改变大小
在连接示范的时候我们就有提到,在嵌入窗口之前,我们需要先调整好待测应用的大小,嵌入之后该应用的大小将无法改变。
这是因为Windows窗口在截图时需要记录分辨率,所以窗口嵌入到IDE后,大小将会被固定。因此我们需要特别注意,嵌入之前就要先调整窗口的大小了。
③ Windows窗口的弹出和断开问题
对于嵌入到IDE的应用窗口,我们可以打开窗口右上角 “手机助手”,然后点击 “断开当前连接” ,Windows窗口就会从IDE中弹出来。
如何在脚本中连接Windows窗口
① 使用窗口句柄
在AirtestIDE里连接的窗口,都是用窗口句柄连接的。窗口句柄是每个Windows窗口对象拥有的独一无二的32位无符号整数,而且每次打开窗口,句柄的数值都会变化。

这就意味着,假如我们用某个窗口嵌入到AirtestIDE里写出了一个脚本,虽然这次可以直接运行,但是通过复制AirtestIDE里的脚本命令行的方式,是无法保证下一次还能够运行的。因为AirtestIDE里的命令行,将会有这样的参数内容 --device Windows:///句柄,而下次再打开窗口,可能句柄已经发生了变化。
使用句柄连接窗口的脚本我们可以这么写:
auto_setup(__file__,devices=["Windows:///133194"])
但是该连接脚本仅对本次打开的Windows窗口有效,如果Windows窗口被关闭后重新打开,句柄也将会发生变化,该脚本失效。
② 使用正则表达式
上面我们在示例使用“搜索窗口”连接窗口的时候,IDE的弹窗会列出当前所有打开窗口的title,然后我们会根据窗口对应的title来进行连接。

所以我们也可以 写一个正则表达式去匹配到待测窗口的title ,并使用这个正则表达式来连接该窗口:
# 例如匹配“吹梦到西洲”后面跟着换行符以外的任意字符的窗口title
auto_setup(__file__,devices=["Windows:///?title_re=吹梦到西洲.*"])
而且大多数情况下,窗口的title比较不容易变化,所以使用正则表达式匹配窗口title来连接待测窗口的脚本,会相对稳定些。
③ 连接整个桌面
如果不需要指定某个窗口应用的话,我们还可以使用如下代码直接连接整个桌面来做自动化:
auto_setup(__file__,devices=["Windows:///"])
小结
好了,今天我们给大家讲解了Windows窗口连接的3个内容:在IDE中连接Windows应用窗口、连接常见问题以及如何用脚本中连接Windows窗口。

至此,设备连接章节的内容我们就全部讲完了,相信大家都迫不及待想要开始写自动化脚本了吧~别着急,下节课我们就带大家一起进入一个新的专题:自动化脚本编写专题。下期我们不见不散~