五、Windows窗口连接¶
注解
在嵌入窗口前,请先最小化其他无关窗口,保持桌面上只有AirtestIDE和待测窗口是激活状态。如果 Windows窗口一键嵌入
出现异常,比如窗口嵌入后点击失效,或者嵌入时软件报错,请换用 Windows窗口无嵌入连接
方案。
1. Windows窗口嵌入连接方案¶
1)选定窗口/选择游戏画面¶
- 点击
选定窗口
/选择游戏画面
按钮(IDE版本不同,button文字可能不同),AirtestIDE将进入窗口选定状态, - 随着鼠标移动,将会有一个绿色/红色细线框,实时框选出鼠标位置对应的窗口,
- 绿框/红框移动到目标窗口后,鼠标左键点击完成嵌入。
注意
- 在出现绿色/红色方框进行窗口选择的状态下,点击键盘的
esc
按键、鼠标右键均可退出状态 - 如果难以选中待测窗口,可以先将桌面上的其他无关软件统一最小化,只激活AirtestIDE和待测窗口,然后再进行连接,能提高准确率
2)搜索窗口¶
或者我们也可以点击 选择游戏画面
隔壁的 搜索窗口
按钮,然后在list中找到我们想要连接的窗口标题,然后点击右侧对应的连接按钮即可一键嵌入待测窗口:
切勿将AirtestIDE作为待测窗口嵌入
请同学们切勿将AirtestIDE的窗口本身作为待测窗口进行嵌入连接,否则可能会出现意想不到的错误!
2. Windows窗口无嵌入连接方案¶
很多桌面软件由于实现方式各有不同,因此可能在 Windows窗口一键嵌入
后出现异常,比如窗口嵌入后点击失效,或者嵌入时软件报错,又或者嵌入后窗口画面显示异常等等。
此时可换用 Windows窗口无嵌入连接
方案进行重试,操作步骤如下:
- 下拉菜单
"设置"-"选项"-"Device"
, - 勾选上
Connect windows without embedding
,如图:
- 保存设置后,再次执行窗口连接操作,即点击选定窗口按钮,使用绿色/红色方框选中待测窗口。此时窗口不会被嵌入到IDE中,可以正常进行操作。
- 同理,此时选择搜索窗口后连接标题对应的窗体,窗口也是不会被嵌入到IDE中,同学们对窗体正常操作即可
另外,使用无嵌入模式连接待测窗口时,IDE的设备窗口会出现类似 connected to the xxx in non-embedded mode
的提示(意思是用无嵌入模式连接了xxx窗口),同学们无需惊慌,正常操作即可:
3. Windows桌面模式¶
假如同学们想要测试的窗口不止一个(拥有多个不同的窗口句柄),那么单独嵌入一个窗口可能就无法满足测试需求,所以我们也提供了另外一种连接Windows的方案:桌面模式。
在此模式下,录制脚本与运行脚本都与正常情况下没有区别,只不过执行时将会 对整个桌面进行截图识别 ,甚至可以识别到AirtestIDE代码窗口里的截图语句(因此在执行脚本时,请尽量缩小AirtestIDE的窗口,避免脚本界面里的截图干扰执行结果,或者将IDE脚本窗口里面的截图转换成代码模式)。
4. 使用脚本连接Windows窗口¶
1)命令行连接¶
在AirtestIDE中连接了Windows窗口后,将会使用这个窗口的句柄来运行脚本,也就是说,在点击运行脚本按钮后,Log窗口显示出的命令行里,将会有 --device Windows:///一串数字
的字样。一旦这个windows窗口关闭,重新启动后的句柄将发生变化,命令行也会发生变化,若需要自行用命令行来运行脚本,请参考 运行脚本 中的 使用命令行运行脚本-设备字符串
的相关章节。
2)脚本连接¶
① 使用窗口句柄¶
使用句柄连接窗口的脚本我们可以这么写:
auto_setup(__file__,devices=["Windows:///133194"])
但是该连接脚本仅对本次打开的Windows窗口有效,如果Windows窗口被关闭后重新打开,句柄也将会发生变化,该脚本失效。
② 使用正则表达式匹配窗口title¶
我们也可以 写一个正则表达式去匹配到待测窗口的title ,并使用这个正则表达式来连接该窗口:
# 例如匹配“吹梦到西洲”后面跟着换行符以外的任意字符的窗口title
auto_setup(__file__,devices=["Windows:///?title_re=吹梦到西洲.*"])
而且大多数情况下,窗口的title比较不容易变化,所以使用正则表达式匹配窗口title来连接待测窗口的脚本,会相对稳定些。
③ 连接Windows桌面¶
如果不需要指定某个窗口应用的话,我们还可以使用如下代码直接连接整个桌面来做自动化:
auto_setup(__file__,devices=["Windows:///"])
5. Windows窗口连接常见问题¶
注解
Windows模式目前仍在完善中,有任何建议欢迎 提issue 。
1)双屏录制截图错误¶
请将主屏幕设置为左侧屏幕,并且在"控制面板"-"显示"-"屏幕分辨率"中,将两个显示器上边沿对齐:
2)录制时截图卡住¶
手动录制脚本时,在完成图片区域框选后,鼠标双击完成图片选择。但新版IDE框选图片后,松开鼠标即可完成截图操作。
3)Windows窗口如何弹出¶
-
关闭IDE会触发弹出窗口
-
点击设备窗标题栏快捷按钮,完成窗口弹出
4)Windows窗口嵌入后无法改变大小¶
由于Windows窗口在截图时需要记录分辨率,因此把窗口嵌入到IDE后大小将会被固定,无法修改。如果觉得嵌入后窗口过大,可以在嵌入之前先将窗口调整至合适大小再进行嵌入。
5)Windows下运行脚本出现点击失败¶
如果在Windows下运行脚本出现点击失败的问题,报错如下,可以尝试关闭当前的IDE,然后再用管理员权限重新运行IDE来解决。
6)不能正常嵌入窗口¶
因为桌面应用的实现方式各有不同,所以当我们尝试在IDE种嵌入窗口的时候,就可能会出现窗口无法正常嵌入的情况,比如:嵌入时IDE报错、无法点击应用、窗口被严重拉伸、窗口黑屏、窗口显示不全等等。
这时候我们就需要换成无嵌入模式来连接我们的待测窗口,或者使用桌面模式也可。
7)Windows下点击位置和Poco选取偏移问题¶
在Windows中,由于被测应用的边缘可能有系统边框,导致在点击位置时、Poco选取节点时出现固定偏移量,具体案例请参考这个issue。
解决办法是,在AirtestIDE中,可以通过选项-设置-Poco,设定Windows Content Area Rect
的边框位置来指定被测应用区域大小和所在位置,使AirtestIDE的Poco插件能够得知游戏画面区域即可。
在代码中,可以通过设置focus_rect
来指定被连接的窗口与实际有效画面之间的边框宽度:
# focus_rect:[左边框宽度,上边框宽度,右边框宽度,下边框宽度]
device().focus_rect = [int, int, int, int]