pywinauto 自动化框架调研
作者:网络转载 发布时间:[ 2012/12/11 11:49:53 ] 推荐标签:
接下来,通过app[u‘无标题 – 记事本’][‘Edit’].Click()来介绍Pywinauto的控件操作流程:
通过app = application.Application() 创建应用,app.start_()启动或app.connect_()连接应用。之后向下层函数传递criteria,内容为[{‘process’ = 4320L, ‘ best_match’ = ‘无标题 - 记事本’}]。通过WindowSpecification._resolve_control( ) -> findwindows.py 寻找匹配的窗口。可通过process (或者class name, control_id等)找到handle,得到它是一个DialogWrapper类的结果。对于多个记事本已开启的情况,pywinauto会通过best_match进行匹配,使用Unique_dict数据结构,对各个窗口实行串匹配算法,选取匹配率大的窗口句柄返回。
之后通过类似方法找到Edit控件,认定其为EditWrapper类,并找到类定义中的Click操作。 操作的具体实现还要依靠 handleprops.py的支持,底层调用 windows api函数实现。
功能分析
优点:
a. 方便实现对windows标准控件的各种鼠标、键盘操作。
b. 通过title、部分title、class name、是否可见等属性得到窗口或控件的句柄和指定。
c. 方便得到控件的各种属性,包括内容、title、大小、坐标、是否可用等。
d. 易于扩展。源于Python脚本语言的易扩展性,可以扩展pywinauto的功能,也可以将pywinauto作为一个模块引入更大的功能库。
局限性:
a. 对非windows标准控件的操作无法实现。(为此,在测试中,我们为非标准控件的操作制作了C底层库及相应python函数接口,扩展了pywinauto)
b. 无法实现对系统时间的调整和性能评测。(e.g. 不能做time.sleep()的内部调整)
c. pywinauto仅局限于界面的自动化操作,其他系统操作(如网络操作)无法实现。
d. 对于已知流程的操作编程较方便,但对于不可知流程或需要判断的流程操作,功能有限。
对Pywinauto的扩展
自动化测试中,对Pywinauto的扩展主要在以下两个方面:
虚拟控件操作的增加
底层调用HiUILib库函数实现。在win32_controls中加入VConWrpper类和相关操作实现,并在窗口指定的过程中增加相应寻找分支,使得对虚拟控件的定位和操作与标准控件基本相同。
其他实用操作的增加
在调研的过程中,我们发现了一些其他实用的操作。因此在操作中,我们将需要的函数加入到application,hwndWrapper等文件中,并增加了多处对win32api等库的函数调用。例如注册表项的增删改操作。
case组织
我们采用Python的unittest模块的基本结构,来组织自动化case。每一个大的功能模块,为一个类,继承与unittest.TestCase。通过在测试类中添加函数的形式,对测试类中的每一个测试点(即case)进行代码编写。测试类中,一定要覆盖的是setUp()和tearDown()函数,作为每一个单元测试函数的入口和出口。Unittest提供TestSuite类来集合和组织测试类中的多个测试函数。同时,提供了TextTestRunner类来运行TestSuite里的类,并返回通过、错误、失败的测试数量以及运行时间。

sales@spasvo.com