首先,大家可以看下这个链接 Windows GUI自动化测试技术的比较和展望 。

这篇文章介绍了Windows中GUI自动化的三种技术:Windows API, MSAA - Microsoft Active Accessibility, UIAutomation

用脚本语言AutoIT实现自动化就是第一种技术Windows API, 查找窗口句柄实现的。

用工具Spy++查看程序,如果Spy++能识别程序窗口中的控件就能用这种技术。

python中也有一个UI自动化测试模块pywinauto,也是用这种技术实现的(补充:pywinauto后来也支持UIAutomation了,本人刚写这个库时还不支持)。

但Windows API实现的自动化不支持WPF程序、Windows 8中的Metro程序,因为它们的控件都是自绘出来的,没有句柄的概念。

UIAutomation实现的自动化支持微软提供的各种界面开发框架,如Win32, MFC, Windows Forms, WPF, Metro App, IE。

另外Qt, Firefox, Chrome实现了UI Automation Provider,也支持UIAutomation.

UIAutomation的C++ API使用介绍可以参考CodeMagazine上的一篇文章

Creating UI Automation Client Applications

还有官方文档 msdn: UI Automation Client Programmer's Guide

我就是根据这个用Python和C++对UIAutomation做了一层封装,方便我自己的使用,可以快速开发自动化脚本。

UIAutomation支持平台包括Windows XP(SP3),Windows Vista, Windows 7, Windows 8、8.1、10。

安装使用python uiautomation,支持Python2,Python3,x86,x64(最新版uiautomation2.0+只支持Python3)。

运行pip install uiautomation,安装后在c:\pythonxx\scripts目录里会有一个脚本automation.py,使用此脚本遍历UI控件。

打开项目主页https://github.com/yinkaisheng/Python-UIAutomation-for-Windows,并阅读readme查看使用介绍。

运行源码demos目录里的操作计算器的脚本 demos\automation_calculator.py,查看一个自动化脚本运行效果。

下面通过QQ2013做下实验(spy++获取不到QQ窗口内的控件,可以对比一下):

然后运行最新版QQ2013, 先保持在qq登录界面

运行cmd,cd到工具的目录,输入automation.py -t3回车,然后3秒内切换到qq的登录界面

cmd窗口中就显示了qq窗口中的控件信息

运行automation.py遍历控件时,支持下列参数

-t int value, 延迟时间time秒,延迟指定秒数再遍历控件,
-r, 从树的根部(root: Desktop)遍历,如果不指定,从当前窗口遍历
-d, int Value, 遍历控件树的的深度depth,如果不指定,遍历整个树,和-c一起使用时,可以为负值
-f, 遍历焦点focus控件,如果不指定,从当前窗口遍历
-c, 遍历光标下的控件,如果不指定,从当前窗口遍历,如果同时指定-d, -d可以为负值,比如-d-2表示从光标下控件向上找到两层父控件,遍历这个父控件

-a, 获取光标下控件及其所有祖先(ancestor)控件

-n, 显示控件的完整name, 如果不指定,只显示前30个字符

例子:
automation.py –t3, 3秒后遍历当前窗口所有控件
automation.py –d2 –t3, 3秒后遍历当前窗口前三层控件
automation.py –r –d1 –t0 -n, 0秒后遍历root的第一层子控件,并显示控件完整名称

automation.py –c –t3, 3秒后遍历鼠标光标下面的控件信息

automation.py –c –t3 -d-2, 3秒后遍历鼠标光标下面的控件向上两层的父控件

下面是在Windows 8中运行automation.py –r –d1 –t0的例子, 如下图

在UIAutomation中控件树的根节点是 桌面Desktop, 上面的命令输入了了 -r(root)参数,就从根节点枚举窗口,参数-d1,只枚举桌面的第一层子控件。

在Windows 8中,如果要查看Metro App的控件信息,必须当前窗口要在Metro界面才能枚举,如果Metro App被切换到后台,则获取不到它的控件。

先运行automation.py -t5, 在5秒内切换到Metro App, 等待几秒钟,查看cmd,就能看到Metro App的控件信息。

automation.py同时会把显示的信息写入到文件@AutomaitonLog.txt,方便查看。

登录QQ2013,再一次枚举它的窗口,如下图,uiautomation遍历出了联系人信息

更多使用介绍,请参考GitHub

https://github.com/yinkaisheng/Python-Automation-for-Windows

另外很多人问我遇到一些软件不能用UIAutomation自动化,在此说明下不能支持的原因:

UIAutomation的工作原理是:当你用UIAutomation操作程序时,UIAutomation会给程序发送WM_GETOBJECT消息,如果程序处理WM_GETOBJECT消息,实现UI Automation Provider,并调用函数UiaReturnRawElementProvider(HWND hwnd,WPARAM wparam,LPARAM lparam,IRawElementProviderSimple *el),此程序就支持UIAutomation。
IRawElementProviderSimple就是UI Automation Provider,包含了控件的各种信息,如Name,ClassName,ContorlType,坐标...UIAutomation根据程序返回的IRawElementProviderSimple,就能遍历程序的控件,得到控件各种属性,进行自动化操作。
所以如果你发现UIAutomation不能识别一些程序内的控件或部分不支持,这并不是UIAutomation的问题,是程序作者没有处理WM_GETOBJECT或没有实现UIAutomation Provider,或者故意不想支持UIAutomation。

很多DirectUI程序都没有实现UIAutomation Provider,所以不支持自动化,要想支持自动化,必须程序作者修改源码支持。
 

转载于:https://www.cnblogs.com/Yinkaisheng/p/3444132.html

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

  1. 基于windows 10打造的kali工具集-ICS Windows v2.0

    ICS Windows v2.0 距离上一次IRTeam发布ICS windows v1.0已经差不多一年了,根据很多安全小伙伴的要求,发布更新版本基于原来的kali windows v1.1,更新了 ...

  2. 使用python封装了一个获取小程序token,发送订阅消息的类

    前言 这是在开发小程序过程中用到的一个类,这里放出来希望对大家有一些帮助. class WeAPP():def __new__(cls, *args, **kwargs):if not hasattr ...

  3. 分享一个自己做的截图小工具(基于Windows平台的批处理文件实现)

    最近项目中要有截图的工作要做,对于我等使用AS的开发人员来说,视频或者截图借用工具也是分分钟的事情,但是公司的业务同事和测试人员不懂怎么使用AS软件,而且犯不着为了截个图就去装AS吧,所以发挥我等程序 ...

  4. python下的一个好用的日历库,支持农历和公历互转,四柱反查等功能

    一般的日历库是顶多支持1800年到2200年,但是sxtwl支持BC722到9999年之间的所有日期. 如果有需要做古人八字,祖先八字.考古日历参考, 古代的农历阳历转换 这些需要的,强烈推荐.下面是 ...

  5. 用Python爬虫做一个短视频+评论下载小工具

    成品展示:  复制以上代码用于视频下载 按照以上步骤获取评论路径复制 选择要保存到哪个文件夹中 输入复制的视频地址和评论地址 保存完成   获取音视频部分主要代码(只是主要功能代码): def get ...

  6. Ansible :一个配置管理和IT自动化工具

    ========================================================================================== 一.基础介绍 == ...

  7. windows清理_系统清理工具软件GlaryUtilitiesPro(Windows全能系统维护军刀)中文版免费下载...

    国际老牌体系维护军刀百宝箱-Glary Utilities是一款免费体系整理与优化东西,是一系列体系清理软件集合,能够清理.加速.增强和维护你的PC机. 它允许你整理体系垃圾文件,无效的注册表键值,上 ...

  8. Uiautomation 在Windows WPF和Qt 产品上的应用

    前面使用Pywinauto 对公司自研的Windows WPF和Qt进行了应用. 最近用Uiautomation 进行了试验,发现Uiautomation 比Pywinauto更加易用,更好上手. 如 ...

  9. python ui自动化测试框架_一个开源的面向.Net 桌面应用的 Python 封装自动化测试框架...

    桌面 UI 的自动化现在已经变成的冷门技术,相比于移动与 Web 自动化来说,桌面应用的控件定位的有其历史复杂性,又有很多古老非标准控制或自定义控件,这些都为桌面程序的自动化增加了难度. 桌面的开源自 ...

最新文章

  1. SpringSecurity使用 配置文件 和wen.xml 文件配置
  2. 基于ZooKeeper的Hadoop HA集群搭建
  3. sql大于某个时间_学习SQL-复杂查询
  4. 奇异值的物理意义是什么?
  5. 《可爱的Python》读书笔记(五)
  6. windows下使用git管理github项目
  7. Shareplex 错误 can't open or read object cache file
  8. 省选模拟赛记录(越往下越新哦~~~)
  9. PHP开发的爱情盲盒交友系统网站源码
  10. 飞线5根连接图_手机主板焊盘掉点飞线维修方法
  11. HoloLens还太远 必应才是微软目前的重头戏
  12. MATLAB神经网络工具箱 BP神经网络函数化表示 BP神经网络梯度\求导函数
  13. 数据库备份的方式有哪些
  14. PyCharm中 Django导入views时出现报错红线
  15. Web 网站架构的演变历程
  16. 计算机界十位顶级人物!
  17. 渗透中超全的Google hack语法
  18. centos7常用命令详解
  19. 如何快速高效的清理虚拟机硬盘空间?
  20. 【机器学习】缺失值的处理方法总结

热门文章

  1. Codeforce_732
  2. 《C++ Primer 第五版》(第2.5节,第3.1-3.4节) ——采用预处理功能编写头文件,string初始化和字符操作,vector初始化和迭代器
  3. 数据库原理及应用【三】DBMS+SQL
  4. 数据结构(七)图的遍历(递归非递归方法)
  5. x86异常处理与中断机制(2)中断向量表
  6. 【汇编语言】8086汇编的loop循环与[bx]寻址(王爽第五章5.5节学习笔记)
  7. 基本TCP套接字编程
  8. db2 c语言游标名称可以是变量,mysql c语言 游标能取多行吗
  9. python列表代码_8种高级的Python列表使用技巧,都给你整理好啦(附实操代码)...
  10. 简单的MVC与SQL Server Express LocalDB