自动化工具 针对 Windows 桌面应用程序 GUI 非标准控件如何进行自动化的

陶刚 · 2022年02月23日 · 最后由 陶刚 回复于 2022年03月11日 · 4629 次阅读

目前 Windows 桌面应用程序大多都是非标准控件,要么是内嵌 Chrome HTML 页面,如外框用 Delphi 和 QT 写的内嵌 HTML 页面,或者是代码绘图自定义控件,通过 Spy++、Inspect、UISpy 等控件识别工具无法抓取控件信息,针对这种情况下,你们是如何进行自动化的,当然 ocr 图片识别的框架或者是相对坐标的方式不是太稳定,现在大家经常用的 Windows 客户端程序,如腾讯 QQ 是 Tencent 自主的框架 TXGuiFoundation 写的内部是代码绘图的,网易云音乐为 QT5 编写的嵌套 Chrome HTML 页面,请问大家有什么好的方法和建议帮助小弟,感谢!

最佳回复

混合使用吧. 如果你们开发的程序支持 SDK 接入的话那么更好. 不支持的话,就混合多种常见方案吧. 比如 WinAppDriver + OCR/模板匹配 + 坐标偏移计算?
至于所说的不太稳定的问题, 其实 Window 程序的环境固定, 只要对业务情况加深熟悉, 是能够稳定下来的. 需要付出一些精力.
我们去年曾经搞过 SAP B1 的 Window 桌面自动化, 采用的方案就是 WinAppDriver + OpenCV + 坐标偏移计算 + SAP B1 UI SDK 接入. 混合使用的效果能够实现 80% 以上的常见业务流. 稳定性还算 OK.

共收到 25 条回复 时间 点赞
Time 回复

适合个勾八,你这个明明是基于 UI Automator 识别工具 Appium 框架连接手机端的微信做的自动化,并且界面元素是能获取的,你这个打广告的

图像识别定位点击

仅楼主可见

遇到了同样的问题,学习下

混合使用吧. 如果你们开发的程序支持 SDK 接入的话那么更好. 不支持的话,就混合多种常见方案吧. 比如 WinAppDriver + OCR/模板匹配 + 坐标偏移计算?
至于所说的不太稳定的问题, 其实 Window 程序的环境固定, 只要对业务情况加深熟悉, 是能够稳定下来的. 需要付出一些精力.
我们去年曾经搞过 SAP B1 的 Window 桌面自动化, 采用的方案就是 WinAppDriver + OpenCV + 坐标偏移计算 + SAP B1 UI SDK 接入. 混合使用的效果能够实现 80% 以上的常见业务流. 稳定性还算 OK.

QQ 的 DirectUI 理论上是可以被支持的,但前提是你有被测软件的源码,然后去实现 Microsoft UI Automation
具体可参考:ui-automation

网易云音乐是 CEF,理论上也是你有源码,开启 CEF 的调试端口,控件也是可以支持被抓取的。

所以你没有源码的情况下,基本没辙,有源码啥都好说。

没怎么玩桌面自动化,http://www.kikicyo.com/article/27/ 之前看到有个 WinAppDriver,写了个 demo,不知道适不适用你这个

陶刚 #14 · 2022年02月25日 Author
chend 回复

我们开发的程序不支持 SDK,我们的产品界面或者是按钮重复性太高且色调、明暗相同,所以对 OpenCV 及 OCR 感觉不太友好

9楼 已删除
15楼 已删除
陶刚 重新开启了讨论 02月25日 16:54
小王 回复

如果使用付费自动化工具的话,我建议你使用 QT 官网提供的 Squish for Qt 6.7.2 IDE 付费工具,并且还是支持 python 语言脚本编写

陶刚 关闭了讨论 02月25日 16:55
陶刚 回复

我看了下,这个 WinAppDriver 是微软官方出的,因为实现了 webdriver 接口,所以说写脚本的时候可以直接用 appium python 库连接调用而已。

里面的 demo 看起来也不是启动手机端的微信程序,而是电脑端的微信。和 appium 的关联也只是借用了它的 python 调用库而已。

陶刚 #11 · 2022年02月25日 Author
陈恒捷 回复

对嘛,但是前提你的界面控件元素能获取到啊,这个是重点,对于 name、id、text 等元素为空的控件按钮所以不适用

陶刚 #16 · 2022年02月25日 Author

对对对,你讲的对,适用 100%😃

17楼 已删除
陶刚 重新开启了讨论 02月28日 17:41

楼上提的方案,我觉得还不错,有些 windows 应用如果是标准控件,基于 python+uiautomation 基本可以搞定,不行就上 airtest 图像定位也可以;有的是内嵌 html 页面的,直接拿到 web 框架中去测也行的;但是 web 上测试,需要修改请求页面的 header,绑定 token,不知大家有没有好的方案?看到有的通过代理实现,有通过 js 发送 http 请求的

WinAppDriver 用这个把,我目前正在使用这个来做的 ui 自动化,很稳定
要不然使用 sikulix,靠截图来做

陶刚 回复

我之前写的那个框架更新了图片识别定位,是基于 openCV 的特征值来做识别的,色彩,分辨率的影响程度不大,我自己还有加算法来除杂,也支持页面上存在多个相同对象的情况。你有需要的话咱们可以交流下

有没有可能你想要 xx 精灵?之前工作中用来做窗口嵌 H5 内容的自动化还可以,只是通用性不是很好,裁图不做杂色过滤的话在其他机器上不太灵,分辨率也要统一,想要批量得上虚拟机;用什么工具来做识别不难,难在前期处理,通过对截图的判断裁剪相对位置等情况来让工具做识别,这里面有很多技巧,可以逛逛做游戏脚本的外挂论坛,暂时还没遇到什么客户端比游戏界面复杂的,总有办法解决

陶刚 #31 · 2022年03月11日 Author
hope1 回复

好的

陶刚 #32 · 2022年03月11日 Author
Zhhh 回复

好的我去看看游戏自动化的论坛

李晓 回复

好的已了解

陶刚 回复

或者你可以详细说下你的场景,你要测试的这个 windows 应用是什么形式的,用的什么框架画界面,各个控件可以获取到什么属性?也贴个图说下你的软件界面到底长啥样?只有一张控件树的图没啥意义。

现在看回帖情况,完全通用的方案暂时是没有的,一般都是根据自己产品的架构去选择对应的测试工具,甚至有时候需要开发配合打开相关调试入口。

虽然看帖子名字和正文像是让大家分享交流自己怎么做,但看评论大家分享自己的新的用法后,你的回复基本都是朝着自己是否能用的方向走得,所以你还是把你的情况先说清楚吧。

陶刚 #30 · 2022年03月11日 Author
hank.huang 回复

可以交流下 QQ:1126331350

陶刚 关闭了讨论 02月25日 16:54
REXLEE 回复

图像识别的定位点击是一个方法,不还是基于 ocr 的,跟那个相对坐标点击也没啥区别呗,而且图像识别对于界面三原色差距不大的按钮就不友好了

陶刚 #12 · 2022年02月25日 Author
干饭狂人 回复

客户端内嵌套的 Chrome 页面,可以单独拿出来走 web 自动化,但是如 QT 自绘图的按钮和界面这种就没辙,网易云音乐外框是 QT5 写的内嵌 CEF,源不源码的无关

陶刚 回复

我看了你各种回复他人评论后,我的总体感受是 “你的这个方案不适合我” ,带有一点否定的感觉。所以我会觉得你想做的是寻求适合自己的解决方案,而不是纯粹听大家说自己的方案。一般看到想了解大家对于某个类型的问题都是怎么解决的,对大家评论的回复主要是表达感谢,然后再是探讨方案其优缺点等细节,甚至整理到正文里进行汇总沉淀,方便更多人了解。

所以基于我的这个理解,给出上面这个把你的被测软件情况说的更详细具体的建议。如果有理解不对的地方,可以回复说明下。

陶刚 #19 · 2022年02月25日 Author
陈恒捷 回复

抱歉,产品未发布,肯定不能附图,我贴的这张图是告诉大家我们的产品所有界面和按钮都是非标准控件(代码绘图,UI 自动化测试工具是通过 API 实现的,只能识别 API 提供的标准控件),本帖是基于非标准控件的自动化的讨论,而不是标准控件的自动化的讨论,我觉得我描述的很明白很清楚,#1 楼#2 楼#5 楼#8 楼#9 楼都看的很明白呀😃

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册