最棒的windows自动化测试工具 pywinauto 速成

2020-08-28  本文已影响0人  limus

如果说PyAutoGUI 是个黑盒自动化测试windows应用操作工具,不用知道应用内部的结构,只需要知道位置,直接上键盘鼠标;
那么Pywinauto就是白盒自动化测试工具,他的操作精细到应用里面的每一个细小的控件

从一个例子开始

这里先上一个简单例子:打开资源管理器explorer . 右键点开 "common files"
代码如下,简单吧!

from pywinauto import Desktop, Application
1、启动程序
Application().start('explorer.exe "C:\\Program Files"')  
2、找到进程, 注意title 可以是模糊匹配
app = Application(backend="uia").connect(path="explorer.exe", title="Program F")    
3、找到主窗口-title模糊匹配
wnd = app['Program']  
4、打印所有控件
wnd.print_control_identifiers()  
================ 具体应用上面稍微改一下程序名================================
5、定位控件
common_files=wnd['common files']  定位UI控件方法1
common_files=wnd.ListItem5           定位UI控件方法2
common_files=wnd['Common FilesLis']  定位UI控件方法3
6、动作
common_files.right_click_input()     右击 ui控件

运行结果如下:


image.png

控件定位方法

那程序中的关键,控件是如何定位的呢?

1、打印所有的控件信息
我们无需使用inspect.exe , spy++ 只需要执行下面语句,就可以吧所有控件信息打印出来

wnd.print_control_identifiers() 

2、然后找到结果中的控件信息,common files 为:

   |    |    |    |    | ListItem - 'Common Files'    (L370, T291, R944, B313)
   |    |    |    |    | ['Common FilesListItem', 'ListItem5', 'Common Files']
['Common FilesListItem', 'ListItem5', 'Common Files']

我们可以使用这3个值中的任意一个来定位控件,而且支持模糊匹配。

源码分析pywinauto 实现的原理

1、建立控件索引
print_control_identifiers():   函数里面把所有控件建立了一个列表,进行词典索引
       # Create a list of this control and all its descendants
       all_ctrls = [this_ctrl, ] + this_ctrl.descendants()
      
        name_ctrl_id_map = findbestmatch.UniqueDict() 
每个控件会有elementinfo
2、查找控件
在控件大列表中根据属性来查找控件 

3、鼠标或者键盘操作
针对控件窗口进行发送消息操作
app.Notepad.Edit.right_click()  
鼠标或者键盘操作就是发送消息了
       win32functions.PostMessage(ctrl, msg, win32structures.WPARAM(flags), win32structures.LPARAM(click_point))

参考:https://pywinauto.readthedocs.io/en/latest/index.html
https://www.kancloud.cn/gnefnuy/pywinauto_doc/1193036

上一篇下一篇

猜你喜欢

热点阅读