五、Windows窗口连接

注解

在嵌入窗口前,请先最小化其他无关窗口,保持桌面上只有AirtestIDE和待测窗口是激活状态。如果 Windows窗口一键嵌入 出现异常,比如窗口嵌入后点击失效,或者嵌入时软件报错,请换用 Windows窗口无嵌入连接 方案。

1. Windows窗口嵌入连接方案

1)选定窗口/选择游戏画面

image

  • 点击 选定窗口 / 选择游戏画面 按钮(IDE版本不同,button文字可能不同),AirtestIDE将进入窗口选定状态,
  • 随着鼠标移动,将会有一个绿色/红色细线框,实时框选出鼠标位置对应的窗口,
  • 绿框/红框移动到目标窗口后,鼠标左键点击完成嵌入。

注意

  • 在出现绿色/红色方框进行窗口选择的状态下,点击键盘的 esc 按键、鼠标右键均可退出状态
  • 如果难以选中待测窗口,可以先将桌面上的其他无关软件统一最小化,只激活AirtestIDE和待测窗口,然后再进行连接,能提高准确率

2)搜索窗口

或者我们也可以点击 选择游戏画面 隔壁的 搜索窗口 按钮,然后在list中找到我们想要连接的窗口标题,然后点击右侧对应的连接按钮即可一键嵌入待测窗口:

image-20210923115700152

image-20210923115526675

切勿将AirtestIDE作为待测窗口嵌入

请同学们切勿将AirtestIDE的窗口本身作为待测窗口进行嵌入连接,否则可能会出现意想不到的错误!

2. Windows窗口无嵌入连接方案

很多桌面软件由于实现方式各有不同,因此可能在 Windows窗口一键嵌入 后出现异常,比如窗口嵌入后点击失效,或者嵌入时软件报错,又或者嵌入后窗口画面显示异常等等。

此时可换用 Windows窗口无嵌入连接 方案进行重试,操作步骤如下:

image

  • 下拉菜单 "设置"-"选项"-"Device"
  • 勾选上 Connect windows without embedding,如图:

image

  • 保存设置后,再次执行窗口连接操作,即点击选定窗口按钮,使用绿色/红色方框选中待测窗口。此时窗口不会被嵌入到IDE中,可以正常进行操作。
  • 同理,此时选择搜索窗口后连接标题对应的窗体,窗口也是不会被嵌入到IDE中,同学们对窗体正常操作即可

另外,使用无嵌入模式连接待测窗口时,IDE的设备窗口会出现类似 connected to the xxx in non-embedded mode 的提示(意思是用无嵌入模式连接了xxx窗口),同学们无需惊慌,正常操作即可:

image-20210923120515001

3. Windows桌面模式

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

image-20210923144606826

image-20210923145712095

在此模式下,录制脚本与运行脚本都与正常情况下没有区别,只不过执行时将会 对整个桌面进行截图识别 ,甚至可以识别到AirtestIDE代码窗口里的截图语句(因此在执行脚本时,请尽量缩小AirtestIDE的窗口,避免脚本界面里的截图干扰执行结果,或者将IDE脚本窗口里面的截图转换成代码模式)。

4. 使用脚本连接Windows窗口

1)命令行连接

在AirtestIDE中连接了Windows窗口后,将会使用这个窗口的句柄来运行脚本,也就是说,在点击运行脚本按钮后,Log窗口显示出的命令行里,将会有 --device Windows:///一串数字 的字样。一旦这个windows窗口关闭,重新启动后的句柄将发生变化,命令行也会发生变化,若需要自行用命令行来运行脚本,请参考 运行脚本 中的 使用命令行运行脚本-设备字符串的相关章节。

clipboard

2)脚本连接

① 使用窗口句柄

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

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

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

② 使用正则表达式匹配窗口title

我们也可以 写一个正则表达式去匹配到待测窗口的title ,并使用这个正则表达式来连接该窗口:

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

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

③ 连接Windows桌面

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

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

5. Windows窗口连接常见问题

注解

Windows模式目前仍在完善中,有任何建议欢迎 提issue

1)双屏录制截图错误

请将主屏幕设置为左侧屏幕,并且在”控制面板”-“显示”-“屏幕分辨率”中,将两个显示器上边沿对齐:

image

2)录制时截图卡住

手动录制脚本时,在完成图片区域框选后,鼠标双击完成图片选择。但新版IDE框选图片后,松开鼠标即可完成截图操作。

3)Windows窗口如何弹出

  • 关闭IDE会触发弹出窗口

  • 点击设备窗标题栏快捷按钮,完成窗口弹出

image

4)Windows窗口嵌入后无法改变大小

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

5)Windows下运行脚本出现点击失败

如果在Windows下运行脚本出现点击失败的问题,报错如下,可以尝试关闭当前的IDE,然后再用管理员权限重新运行IDE来解决。

image

6)不能正常嵌入窗口

因为桌面应用的实现方式各有不同,所以当我们尝试在IDE种嵌入窗口的时候,就可能会出现窗口无法正常嵌入的情况,比如:嵌入时IDE报错、无法点击应用、窗口被严重拉伸、窗口黑屏、窗口显示不全等等。

这时候我们就需要换成无嵌入模式来连接我们的待测窗口,或者使用桌面模式也可。

7)Windows下点击位置和Poco选取偏移问题

在Windows中,由于被测应用的边缘可能有系统边框,导致在点击位置时、Poco选取节点时出现固定偏移量,具体案例请参考这个issue

解决办法是,在AirtestIDE中,可以通过选项-设置-Poco,设定Windows Content Area Rect的边框位置来指定被测应用区域大小和所在位置,使AirtestIDE的Poco插件能够得知游戏画面区域即可。

image

在代码中,可以通过设置focus_rect来指定被连接的窗口与实际有效画面之间的边框宽度:

  1. # focus_rect:[左边框宽度,上边框宽度,右边框宽度,下边框宽度]
  2. device().focus_rect = [int, int, int, int]