因为女朋友学习的时候遇到需要对一个软件进行多次重复的情况,向我求助,我就想到了利用自动化工具来完成相关操作。一开始想使用appium中带的windows driver,但是看了一下文档觉得有些复杂,随后选择了使用pywinauto。
安装
pip install pywinauto
使用
选择驱动
选择对应的驱动,这里我选择的UIA模式
Win32 API (backend=“win32”) - 现在的默认backend
MFC, VB6, VCL, 简单的WinForms控件和大多数旧的遗留应用程序
MS UI Automation (backend=“uia”)
WinForms, WPF, Store apps, Qt5, 浏览器
注意: Chrome在启动之前需要–force-renderer-accessibility cmd标志。 由于comtypes Python库限制,不支持自定义属性和控件。
本来我并不确定要选择什么驱动,所以我使用了inspect.exe,在uia模式下可以检索出更多的控件属性,所以我使用uia模式。还有更多的检查工具可以帮助我们选择适合的驱动。
启动应用
启动应用使用start(“app_path”)
函数
from pywinauto.application import Application
app = Application(backend="uia").start('G:\\CurveFitting\\CurveFitting.exe')
绑定窗口
使用window()
函数
win_page = app.window(title='水文频率分布曲线适线软件(教学版)')
其中的title可以由inspect软件在uia模式下选择软件窗口,在value.value下查看。
定位元素
定位元素前可通过print_control_identifiers()
查看软件DOM树
win_page.print_control_identifiers()
从返回结果中查找定位元素的属性值,方便进行定位。定位时使用窗口["属性值"]
即可定位。
# 点击获取数据
win_page['Button11'].click()
元素操作
可通过定位.操作
的方式进行元素操作。
# 输入设计值
win_page['Edit6'].type_keys(input_value)
# 点击立即查询
win_page['立即查询'].click()
# 获取设计频率
output_value = win_page['Edit7'].legacy_properties()['Value']
通过上述操作即可实现软件的自动化操作,亦可为测试自动化所用。
本文使用的代码的github地址