pywinauto是一个
用于自动化Python模块
,适合Windows系统的软件(GUI),可以
通过Pywinauto遍历窗口
(对话框)和窗口里的控件,也可以
控制鼠标和键盘输入
,所以它能做的事情比之前介绍的pysimplegui更多
一般使用pip安装就行了
pip install pywinauto
官网文档:https://pywinauto.readthedocs.io/en/latest/
我们要控制软件的第一件事就是启动一个Windows软件,每一个软件(进程)都是一个Application对象
实例化Application对象的时候可以传入一个backend参数,可选值为
win32(默认)和uia
如果无法知道要测试的软件是属于哪种框架,可以使用
Inspect(对应uia)
和
Spy++
(对应win32)
看看,你看哪个显示得更全就选哪个。Inspect和Spy++需要自己安装一下
下面是Application对象的主要方法
举例,启动一个微信应用,通过进程号连接,
进程号就是在任务管理器里详细信息看到的PID
我们要获取窗口,一个窗口都是一个
WindowSpecification
对象,可以通过Application对象的window()方法获取,参数可以是title、classname或者best_match等,这都可以在inspect.exe上看到,不过
需要注意的是inspect看到的Name其实对应的是window()的title参数
WindowSpecification对象常用的方法如下
举个栗子
一个窗口里一般都会有各种各样的元素,比如说
按钮
(Button)、
编辑栏
(Edit)、
树状视图
(Tree View)、
复选框
(CheckBox)、
对话框
(Dialog)、
工具栏
(Toolbar)、
状态栏
(StatusBar)、
列表框
(
ListBox
)、
窗格
(Pane)、
菜单
(Menu)、
菜单栏
(
MenuItem
)、
静态内容
(Static)、
工具提示
(ToolTips)、
列表控件
(ListView)、
单选框
(
RadioButton
)、
组合框
(ComboBox)、
选项卡控件
(TabControl)、
组框
(GroupBox)、
弹出菜单
(PopupMenu)、
头
部
(Header)等
因为控件类型太多了不能一个一个学习,但是它们都有一个
element_info
的属性,访问之后会返回一个继承于
ElementInfo
的对象(UIAElementInfo或HwndElementInfo),比较重要的属性或方法如下
这些元素除了有
element_info
可以获取一些元素的主要信息,它们还都被包装成一个Wrapper,所以也可以学一下
BaseWrapper
的常用方法和属性。其实
BaseWrapper
的方法基本上都是对
ElementInfo
进一步包装,我只列出部分方法,如下表
说明一下,每个控件元素都有对应的Wrapper,所以上面的方法也不一定都用,需要根据实际情况进行测试区分。另外,比较有用的
click_input()
和
type_keys()
这两个方法分别用于操作鼠标和键盘(输入),下面我会单独拿出来说一下
鼠标点击肯定离不开点击的位置,桌面就是一个坐标,左上角为坐标原点,往右是X轴正向,往下是Y轴正向。pywinauto提供了一个mouse模块用于鼠标操作,最核心的方法是
_perform_click_input()
,不过它是一个私有方法,我们调用的是基于它的封装方法,如下表
参数说明:
-
参数button
的默认值都是“left”,即鼠标左键,可选值有left、right、middle、move、wheel、x
-
参数coords
的默认值都是元组(0, 0),元组里的两个整数分别是X、Y轴的值
-
参数wheel_dist
表示滚动的距离,大于0是向上滚动,小于0是向下滑动
举个栗子