Windows GUI自动化测试技术的比较和展望 (转)

Sikuli X 1.0rc3 GUI自动化测试实战工具 Sikuli X 是一个创新的自动化测试工具,通过图像识别技术,它能够让开发者或测试人员非常容易地实现图形用户界面(GUI)的自动化测试。Sikuli X 在幕后使用OpenCV技术,能够在无需编写复杂代码的情况下,根据屏幕上的图像进行自动化操作。Sikuli X的Python类库提供了丰富的API来支持GUI自动化测试。例如:Screen():代表当前的屏幕,可以用来截图和识别图像。:代表屏幕上的一个矩形区域,可以用坐标和尺寸定义。find():在指定的区域中查找图像。 阅读详情

【这里的自动化测试专指GUI自动化(不包含Web)】

以前写过一篇跟UI自动化测试有关的技术 ,谈到了一个自动化测试工具必备的几个功能,而且也提到了Windows平台自动化测试工具所基于的一些技术。下边就说一下这些技术的比较和展望,同时也包含了一些纠结……

  1. Windows API 
    识别窗口:需要通过FindWindow 和EnumWindows 来查找到窗口句柄,然后再调用其它API(GetWindowText,GetWindowRect, GetWindowLong…)来获取窗口属性,以此来找到想要的控件(窗口) 
    操作窗口和获取属性:通过SetWindowText 和GetWindowText 来操作控件上显示的文字,通过SetForegroundWindow 设置顶层窗口,GetForegroundWindow 获取当前的顶层窗口,类似的还有GetActiveWindow 和SetActiveWindow 。其它操作就不一一列举了……从理论上来说,通过Windows API和Windows Message可以完成对大部分窗口(控件也是窗口,一起都是窗口)的操作,也可以获取部分控件的部分属性。但是缺点和优点也比较明显: 
    优点:就是看起来很高深很强大很底层,对标准Windows的控件支持还不错 
    缺 点:底层意味着复杂,意味着需要多层的封装,意味着开发效率低下,也意味着对Windows API的完全依赖。如果碰到一个非标准(自定义控件),用这种方式实现的自动化工具基本上完全束手无策,即使有开发团队的支持也很难完成自动化。当然了, 算坐标,甚至用全局坐标来做也可以做,但这是野蛮做法,自动化测试的代码非常不稳定,维护和分析结果的成本也很高。 
    总而言之,言而总之,没有哪 个自动化测试工具完全用Windows API来实现……当然了,也不是说Windows API就没有用了,基本上所有的自动化工具都会或多或少,或直接或间接的调到Windows API,也没人敢说他不调一个Windows API就能做自动化测试工具的,最起码鼠标键盘消息的模拟他就没法弄……
  2. MSAA - Microsoft Active Accessibility 
    MSAA 在1997年在Windows 95中就已经包含的技术,也许你没有听说过,但是在所有的标准控件中,都实现了MSAA的接口,在微软所有的操作系统中都集成了MSAA的组件,在这里, 我就不讨论MSAA的历史和相关技术了,就啰嗦一点点感慨:MSAA天生就不是设计给自动化测试的,它存在的意义在于提供一套接口,让开发人员可以方便的 给残疾人开发可以使用的软件,比如读屏程序(鼠标移动到按钮的时候,可以发出声音,辅助视力障碍的人操作电脑),从而实现微软将电脑普及到每一个家庭的梦 想。 
    下面进入正题,虽然MSAA不是设计给自动化测试的,但是现有的所有自动化测试工具都是基于或者部分基于MSAA来实现的。MSAA很多时候直接把它叫做IAccessible ,它本身是一个COM组件,最主要是实现了IAccessible 的接口,它提供了一些方法,通过这些方法,可以获取控件更详细的信息,也可以通过一些方法对控件进行简单的操作(DoDefaultAction )。有兴趣的,可以参考Microsoft Active Accessibility 
    优 点:比起Windows API来说,用户只需要跟IAccessible打交道,通过这个接口能获得的控件信息相对丰富很多,基本操作也不需要通过Windows Message的方式来实现。另外一个比较大的优点就是,自定义控件的支持,当然了,并不是说开发写一个自定义控件,这个控件就可以通过MSAA来识别, 而是说当开发人员在实现自定义控件的时候,可以实现IAccessible的接口,并且通过这个接口,把一些的属性和操作暴露出来,测试人员就可以将这个 控件当作标准控件,并通过MSAA来自动化。看起来麻烦了点,但是最起码对自动化自定义控件提供了可能。 
    缺点:天生不足,MSAA从来就不是给 自动化测试设计的,所以也不会考虑自动化测试的需求,获取到的控件信息比Windows API多,但是相对自动化测试的需求来说还是远远不够,而且仅仅支持一个基本操作,其它的操作还必须通过Windows Message。另外就是微软推出WPF以后,MSAA的局限性越加明显(这也是因为WPF的控件属性更加丰富,更具定制性,更自由,用MSAA难以描 述),这也是微软推出UIAutomation的一个的诱因。
  3. UIAutomation 
    伴随着自动化测试的应用越来越广泛,以及WPF的发布,微软在MSAA的基础上,对MSAA进行封装,重新设计并实现了UIAutomation的类库(.Net) ,微软根据自动化测试的需求,重新实现了一套自动化体系,大家可以看下边的图,这个比较准确。从此自动化测试人员迎来了更广阔的一片蓝天(虽然还飘着点小小的乌云……),随之也有了一些小小的纠结: 
    a. UIAutomation (后边就简称为UIA) Vs MSAA 
    在UIA发布的时候,基于MSAA的自动化工具已经发展的非常成熟,比如Silktest和WinRunner… 那么大家在开发一个自己的自动化工具的时候,应该用MSAA呢,还是UIA? 这篇文章可以给一个两者的大概关系:UI Automation and Microsoft Active Accessibility 。 按照微软的想法和设计,UIA是要取代MSAA成为自动化测试的标准类库,并且对WPF来说,UIA才是一等公民。从架构上来讲,UIA在针对标准控件的 时候,通过UI Automation Proxy调用了MSAA Server,基本上覆盖了MSAA的功能:  
     
    从上边的图来看,从理论上来说,UIA应该是可以完全替代MSAA的,但是理想和现实往往是有很大差距的,从现实来看,UIA不能完全替代MSAA,因为一个经典的UIA的Exception:

    Exception 
    Time Stamp : 10/9/2009 4:37 PM 
    Element : Element details not available. 
    Name : TreeValidationException 
    Message : UI Automation tree navigation is broken. The parent of one of the descendants exist but the descendant is not the child of the parent 
    Stack Trace :    at UISpy.Base.Tree.BuildTree(AutomationElement element) 
       at UISpy.Base.Tree.BuildTreeAndRelatedTrees(AutomationElement element) 

    只要用过UI Spy (UIA的一个小工具,可以看到整个UIA的控件树,类似AccExplorer ) 的基本上都会碰到,当移动鼠标并识别某个控件时,就有可能看到上边的Exception,意思是说,UIA在构造UI树的时候失败,鼠标所指向的控件不合 法。但是如果你用AccExplorer来看,就完全没有这个问题,控件树的结构也比较完整。就意味着,你无法通过遍历控件树来找到想要的控件,因为控件 根本就没有构造在UIA的控件树上,当然也无法对它进行任何操作(当然,如果你用屏幕坐标,然后通过 AutomationElement.FromPoint来做,还是可以做的,但是请注意,你使用了屏幕坐标)。在一些小的程序上,可能不是很明显,如果 是大的项目,并且有很多自定义控件的情况下,这个问题就会被放大,这个Exception就像一个黑洞一样会吞掉很多控件,也意味着你需要在很多地方去写 代码来绕过这个问题,同时也带来了维护成本的大幅提高。 
    b. Managed vs Unmanaged 
    UIA的类库是作为.Net3.0的一部分发布,这就意味着UIA只能用.Net的语言来写,并且运行在.Net托管堆中,性能就成为其中一个问题,虽然我不认为是很大的一个问题,一般来说自动化测试程序在等待UI反应的时间要远远多于这一点点的性能差异。 
    c. In-Process Vs Out-Process 
    尽 管大部分的自动化测试工具和测试代码都是运行在进程外,但是还是有一些特殊的应用需要在进程内进行,比如在API测试中,需要进行UI交互,为了保证 API测试的自动化,就必须在进行内写自动化脚本。MASS是支持进程内操作的,但是UIA没有宣布支持,在进程内使用时会有很大的性能问题,也可能导致 一些未知的问题。 
    d. 自定义控件的支持 
    这个UIA就有先天优势了,但也需要开发人员的支持,或者有能力的测试人员也可以自己实现, 这就是UIA中的两种Provider,一种内建,一种外置,只要实现了Provider,自定义控件就可以完美的支持UIA。当然了,对标准控件来 说,UIAutomation发布在Win32控件和WinForm的控件之后,所以微软就帮我们实现好了对应这些控件的Client Provider,所以UIA对于以前的Win32和Winform控件也是完美支持的,对WPF的标准控件就更不用说了,天生就是带有Provider 支持的。具体的我就不展开了,大家有兴趣可以看这个:UI Automation Providers Overview

  4. Windows Automation API 3.0 
    这 个并不是新的自动化测试的技术,而是对UIAutomation(UIA)以及MSAA的升级,更准确的说,是UIA SP1,但名字直接跳到3.0,不知道1.0和2.0是不是指的MSAA的版本,所以大家看到这个名字以后不要晕……  顺便唠叨一下微软的东西,貌似某个人说过,微软的东西都是在没有做完的时候就发布出去,然后过一段儿时间马上发布Service Pack,所以微软的产品一定要等到SP1以后才能用,这个相当准确:) 更详细的介绍大家可以看这个Blog:Microsoft Windows UI Automation Blog 
    我 在这里就大概说一下,Windows Automation API 3.0是伴随着Windows 7发布的,也就是说Windows 7本身就集成了Windows Automation API 3.0所以的组件和功能,再换一句话说就是Windows 7就自动化测试的支持将会更好。最主要的更新如下(与上边UIA的几个纠结对应): 
    a. 更新以后,以前Tree断掉的问题基本上修复了,我在Windows 7上测试的结果来看,没发现问题 
    b. 新增了Unmanned API和COM API,这样直接用Native的C++也可以来开发基于UIA的自动化工具 
    c. 有了COM API以后,看起来In-Process也不是问题了 
    d. … 

    Windows Automation API 3.0看起来很美,基本上都解决了我上边说的UIA的问题,让人感觉到这个版本的UIA才是真正可以替代MSAA的东西 。 但是这个Windows Automation API也让我纠结了好一阵子,差一点就想放弃UIA,重新把Code转移到MSAA上,最主要的原因是,Windows Automation API 3.0只支持Windows 7,不能安装在XP/Vista上,后来经过和他们的斗争,有了下边的Update:http://social.msdn.microsoft.com/Forums/en-AU/windowsaccessibilityandautomation/thread/46e83c55-47b8-4874-9222-7ce2fa58751d 
    所以,对Windows Automation API 3.0的当前情况就是: 
    如果你仅仅在Windows 7 上做自动化测试,那么恭喜你,你可以使用Windows Automation API 3.0的所有功能,既可以用Managed code来做,也可以用Unmanaged code来做 
    如果你想在Vista上用,装了那个更新以后,应该就可以了,我没试过…… 
    如果你想在XP/Server2003上使用,你需要等到今年年底的某个时候(快到了:)) 
    总之,在Windows 7上,怎么做都行(Managed/Unmanned),在XP/Vista/Server2003上,只能用.Net,而且还会碰到有些控件不在控件树上。所以,大家跟我一起期待年底的更新吧……

Note:

1. 多谢xiongli, 推荐大家去看这篇文章,确实写的很精彩http://eparg.spaces.live.com/blog/cns!59BFC22C0E7E1A76!4008.entry

2. 任何帮助都不如Spec写的明白,啥也不说了 UI Automation Community Promise Specification

Agentic AI应用架构师如何提升AI应用的灵活性 可扩展性(Scalability):快速添加新功能或扩展任务范围(如Agent从“客服”扩展到“供应链管理”);可修改性(Modifiability):调整Agent的决策逻辑或动作策略,无需重构整个系统;鲁棒性(Robustness):在环境异常或数据噪声下保持性能稳定;自适应(Self-Adaptation):自主学习新场景,无需人工干预。状态空间(S):Agent能感知的所有内部/外部状态(如用户需求、环境数据);动作空间(A):Agent能执行的所有动作(如调用工具、发送消息); 阅读详情

相关推荐

工创赛智能搬运小车实战:视觉定位、底盘控制与RTOS调度

智能搬运系统是嵌入式控制与机器视觉融合的典型工程实践,其核心在于视觉定位精度、运动控制稳定性与实时任务调度能力。在有限算力(如STM32H7)、低功耗约束和结构化场景下,传统CV方法(如FAST+RANSAC)比轻量级深度学习更具鲁棒性与实时性;而底盘控制需穿透PID表层,直击死区补偿、编码器硬件滤波与负载自适应等物理层细节;RTOS则不是炫技工具,而是保障多模块时序确定性的刚需——尤其在视觉-控制-执行强耦合链路中,任务优先级、事件组通信与栈安全直接影响系统存活。本文聚焦全国大学生工程训练竞赛(工创赛)真

weixin_29194693的博客 267

【转】Windows GUI自动化测试技术的比较和展望

UIAutomation  伴随着自动化测试的应用越来越广泛,以及WPF的发布,微软在MSAA的基础上,对MSAA进行封装,重新设计并实现了UIAutomation的类库(.Net),微软根据自动化测试的需求,重新实现了一套自动化体系,大家可以看下边的图,这个比较准确。从此自动化测试人员迎来了更广阔的一片蓝天(虽然还飘着点小小的乌云……),随之也有了一些小小的纠结:  a. UIAutomation (后边就简称为UIA) Vs MSAA  在UIA发布的时候,基于MSAA的自动化工具已经发展的非常成熟,比

Luke的自留地 1062

光学设计必看:如何用泽尼克系数优化镜头像差?从Zemax到实际案例解析

本文深入解析了如何利用泽尼克系数优化镜头像差,从理解其工程价值、解码软件报告,到在Zemax中主动设置优化目标。通过高倍显微物镜等实际案例,详细展示了如何通过分析泽尼克系数诊断问题,并实施针对性优化策略,从而实现对球差、彗差等像差的精准控制,提升光学设计的精细度和系统稳健性。

gg901的博客 1031

Windows GUI自动化测试技术的比较和展望

<br />原文地址:http://www.51testing.com/html/16/n-170116.html<br />以前写过一篇跟UI自动化测 试 有关的技术,谈到了一个自动化测试 工具必备的几个功能,而且也提到了Windows 平台自动化测试工具所基于的一些技术。下边就说 一下这些技术的比较和展望,同时也包含了一些纠结……<br /> Windows API<br />  识 别窗口:需要通过FindWindow和EnumWindows来查找到窗口句柄,然后再调用其它 API(Ge

vagabond1的专栏 1万+

【飞控】UAV Toolbox Support Package for PX4 Autopilots安装与配置

安装配置UAV Toolbox Support Package for PX4 Autopilots硬件安装包

m0_58373406的博客 1616

从基础知识到PCB设计,打造全能硬件工程师

成为一名出色的硬件工程师需要在多个领域建立坚实的基础。从硬件基础知识、元器件学习、模拟电子电路到PCB设计,以及数字电子电路与通信,每个方面都是构建全面硬件工程师技能集的重要组成部分。通过深入学习和实践这些领域,你将能够在硬件工程领域中取得更多的成就。

weixin_46969363的博客 2722

Windows GUI自动化测试

【这里的自动化测试专指GUI自动化(不包含Web)】 以前写过一篇跟UI自动化测试有关的技术,谈到了一个自动化测试工具必备的几个功能,而且也提到了Windows平台自动化测试工具所基于的一些技术。下边就说一下这些技术的比较和展望,同时也包含了一些纠结…… Windows API识别窗口:需要通过FindWindow和EnumWindows来查找到窗口句柄,然后再调用其它API(GetWi...

weixin_30381793的博客 487

保姆级教程:用Ansys Workbench找出BGA焊点最容易坏的位置(附热循环+振动分析)

本文提供了一份详细的Ansys Workbench教程,指导如何通过热循环和振动分析找出BGA焊点最容易失效的位置。从模型搭建、材料定义到网格划分和载荷设置,全面解析了BGA焊点可靠性分析的全流程,帮助工程师提前预防焊点开裂问题,提升电子封装设计的可靠性。

weixin_30983965的博客 420

终极Windows GUI自动化指南:用pywinauto轻松掌控桌面应用

在现代软件开发中,**Windows GUI自动化**已经成为提高工作效率的必备技能。pywinauto作为一款强大的Python库,专门用于自动化Windows桌面应用程序,让开发者能够轻松控制鼠标、键盘和菜单等界面元素,实现复杂的自动化任务。无论你是软件测试工程师、自动化脚本开发者,还是想要简化重复性工作的普通用户,掌握pywinauto都将为你的工作带来革命性的改变。🚀 ## 🔍 py

gitblog_00480的博客 1016

Coze知识库搭建:智能化管理与高效检索实践

知识管理系统是现代企业信息资产管理的核心基础设施,其核心原理是通过结构化存储和智能检索技术实现知识的快速流转。在技术实现上,基于NLP的语义理解引擎和知识图谱构建是关键,能够显著提升检索准确率和知识关联性。以Coze平台为例,其针对中文场景优化的分词算法和多模态处理能力,可有效解决技术文档管理中的术语识别和格式兼容问题。这类系统在开发团队知识沉淀、新员工培训等场景中价值显著,特别是当集成RBAC权限模型和自动化备份策略后,既能保障信息安全,又能实现持续的知识迭代。通过合理配置同义词扩展和权重调整,可使搜索命

weixin_29041195的博客 262

零基础入门生信转录组数据分析——导读

转录组数据分析(上游,下游,数据可视化)专栏的目录,可以直接通过点击各个分析点直接跳转到相关帖子,方便查找和观看

呆猪儿的博客 1万+

开源自己用python封装的一个Windows GUI(UI Automation)自动化工具,支持MFC,Windows Forms,WPF,Metro,Qt

首先,大家可以看下这个链接Windows GUI自动化测试技术的比较和展望。 这篇文章介绍了Windows中GUI自动化的三种技术:Windows API,MSAA - Microsoft Active Accessibility,UIAutomation 用脚本语言AutoIT实现自动化就是第一种技术Windows API, 查找窗口句柄实现的。 用工具Spy++查看程序,如果Spy++能识别程序窗口中的控件就能用这种技术。 python中也有一个UI自动化测试模块pywinauto,也是...

zsw119的博客 2510

AgentScope Java 2.0 最佳实践:9 个完整示例手把手带你开发 Java‑Agent

本文基于9 个完整示例,深入剖析从基础对话(BasicChatExample)、工具调用(@Tool 注解)、结构化输出(POJO Schema)、ToolGroup 自主管理、MCP 外部工具集成、Hook 生命周期监控、Spring Boot SSE 流式 Web、JsonSession 会话持久化到中断恢复的全链路实战教程。

program哲学 1643

ViVeTool-GUI深度技术解析:Windows功能控制图形化工具专业指南

ViVeTool-GUI是基于ViVe/ViVeTool技术构建的Windows功能控制图形界面工具,采用.NET Framework 4.8技术栈和Visual Basic.NET实现,为系统管理员和技术爱好者提供了可视化操作Windows隐藏功能的解决方案。该工具通过封装ViVe API底层调用,将复杂的命令行操作转化为直观的图形界面,支持Windows 10 Build 18963(版本20

gitblog_00601的博客 455

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

如何用UI-TARS实现游戏和GUI自动化测试的10倍效率提升

还在为繁琐的游戏测试和界面自动化而烦恼吗?UI-TARS作为一款革命性的开源多模态智能体,正在重新定义GUI交互的边界。这款由字节跳动和清华大学联合研发的AI工具,通过先进的视觉语言模型技术,让计算机能够像人类一样理解和操作图形界面,实现真正的自动化交互。 ## 传统测试的三大痛点:为什么我们需要AI助手? 游戏和软件测试一直是开发过程中最耗时、最枯燥的环节。传统方法面临三大核心挑战: 1.

gitblog_00799的博客 778

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

UI-TARS:AI如何重塑GUI自动化测试的未来?

立即体验UI-TARS,开启你的智能测试之旅,让复杂的界面测试变得像搭积木一样简单而高效。

gitblog_00902的博客 769

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

AI驱动的GUI自动化革命:pywinauto未来发展趋势与智能应用展望

pywinauto作为一款强大的Windows GUI自动化Python库,正在引领桌面应用程序自动化测试的新潮流。这个开源项目为开发者和测试工程师提供了完整的Windows界面控制能力,从简单的鼠标键盘操作到复杂的UI元素识别,pywinauto都能轻松应对。本文将深入探讨pywinauto的技术架构、当前应用场景以及未来在AI驱动下的智能化发展趋势。 ## 📊 pywinauto核心技术架

gitblog_01197的博客 310

ViVeTool-GUI深度解析:解锁Windows隐藏功能的终极可视化方案

在Windows系统探索的领域中,ViVeTool-GUI以其独特的可视化界面设计,为技术爱好者和系统管理员提供了前所未有的Windows功能控制能力。这款基于ViVe/ViVeTool技术的图形界面工具,将复杂的命令行操作转化为直观的点击体验,让用户能够安全地探索、启用和禁用Windows Insider版本中的隐藏功能。 ## 技术架构深度剖析 ### 核心设计理念:可视化与安全的平衡

gitblog_00986的博客 324

【数据结构-5】单链表的实现

单链表,具体来说是单向的、不带头的、不循环的链表。链表由一个一个节点组成,每个节点分为数据域和指针域,数据域存放数据,指针域存放下一节点的地址。这样,就可以根据指针域中的地址找到下一个节点,节点就串起来了构成了单链表。

weixin_44218929的博客 197
上一篇: wondows之UIAutomation的优缺点
下一篇: windows之Inspect(官方)
whackw
博客等级 码龄16年 203粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值