当前位置: 代码网 > it编程>前端脚本>Python > Python Pywinauto轻松实现Windows桌面自动化详解

Python Pywinauto轻松实现Windows桌面自动化详解

2025年05月18日 Python 我要评论
你是否厌倦了每天重复点击软件界面的枯燥操作?是否希望能像自动化网页那样,轻松控制桌面程序?在自动化测试逐渐扩展到客户端桌面的今天,你还不知道 pywinauto,就真的落后了!手动测试windows桌

你是否厌倦了每天重复点击软件界面的枯燥操作?是否希望能像自动化网页那样,轻松控制桌面程序?在自动化测试逐渐扩展到客户端桌面的今天,你还不知道 pywinauto,就真的落后了!

手动测试windows桌面应用,重复点击、输入,累到怀疑人生?pywinauto来救场!这个python库让你像“魔法师”一样操控windows gui,轻松模拟鼠标键盘操作,自动化notepad、excel甚至企业级软件。“pywinauto让windows自动化像写脚本一样简单!”数据显示,pywinauto可将测试时间缩短80%,覆盖率提升90%。无论你是测试新手还是rpa开发者,本文从零开始,带你通过环境搭建、控件定位到实战案例,玩转pywinauto,自动化技能一飞冲天!

pywinauto是什么?如何用它实现windows自动化测试?从环境搭建到测试用例设计,具体步骤有哪些?如何应对复杂场景?

观点与案例结合

pywinauto通过python api连接windows应用,定位控件并模拟用户操作,支持win32和uia后端,适合gui测试、数据采集和自动化任务。以下是实现自动化测试的五大步骤,附实战案例与代码。

pywinauto是一个用于自动化python模块,适合windows系统的软件(gui),可以通过pywinauto遍历窗口(对话框)和窗口里的控件,也可以控制鼠标和键盘输入,所以它能做的事情比之前介绍的pysimplegui更多

官网文档:https://pywinauto.readthedocs.io/en/latest/

1. 环境搭建:快速入门pywinauto

场景:安装python、pywinauto和依赖,准备测试环境。

步骤:

安装python(3.6+):从python官网下载,确保pip可用。

安装pywinauto:运行pip install pywinauto。

(可选)安装调试工具:如pywin32(pip install pywin32)和spy++(visual studio自带)或inspect.exe(windows sdk)。

验证安装:运行python -c "import pywinauto",无报错即成功。

案例:某测试团队安装pywinauto,5分钟完成环境搭建,开始测试企业wpf应用。 代码(验证安装):

import pywinauto
print("pywinauto installed successfully!")

实践:安装pywinauto,运行上述代码验证环境。

2. application:启动与连接应用

场景:用application启动新应用或连接已有进程。

核心:

application(backend="win32"):适合传统win32应用(如notepad)。

application(backend="uia"):适合现代wpf/winforms应用(如excel)。

方法:start()启动新进程,connect()连接运行中应用。

代码(启动notepad与连接excel):

from pywinauto import application
 
# 启动notepad
app_notepad = application(backend="win32").start("notepad.exe")
 
# 连接已运行的excel
app_excel = application(backend="uia").connect(title_re=".*excel.*")

说明:start()直接运行可执行文件,connect()通过窗口标题、正则表达式或进程id定位。

案例:某企业用application连接erp软件,自动录入数据,效率提升70%。

实践:启动notepad,尝试用connect(title="untitled - notepad")连接。

3. windowspecification:精准定位窗口与控件

场景:用windowspecification定位窗口和元素控件(如按钮、文本框)。

核心:

windowspecification通过窗口标题或控件属性定位,支持链式调用。

用print_control_identifiers()查看控件树,获取控件名称、id或类型。

方法:child_window()定位子控件,wrapper_object()获取可操作对象。

代码(定位notepad编辑框):

from pywinauto import application
 
# 启动notepad
app = application(backend="win32").start("notepad.exe")
 
# 获取窗口
dlg = app["untitled - notepad"]
 
# 打印控件树
dlg.print_control_identifiers()
 
# 定位编辑框
edit = dlg.child_window(control_type="edit").wrapper_object()

说明:print_control_identifiers()输出控件层次,control_type基于uia(如edit、button)。

案例:某测试团队用windowspecification定位wpf应用的“提交”按钮,自动化点击,测试覆盖率达95%。

实践:运行上述代码,查看notepad控件树,定位编辑框。

4. 键盘与鼠标操作:模拟用户行为

场景:模拟键盘输入、快捷键和鼠标点击。

核心:

键盘:type_keys()输入文本或快捷键(如^s表示ctrl+s)。

鼠标:click()、double_click()、right_click()模拟鼠标操作。

支持pywinauto.keyboard和pywinauto.mouse模块精细控制。

代码(notepad输入与保存):

from pywinauto import application
 
# 启动notepad
app = application(backend="win32").start("notepad.exe")
dlg = app["untitled - notepad"]
edit = dlg.child_window(control_type="edit").wrapper_object()
 
# 键盘输入
edit.type_keys("hello, pywinauto!{enter}let's automate!")
 
# 鼠标点击“文件”菜单
dlg.menu_select("file -> save as")
 
# 保存文件
save_dlg = app["save as"]
save_dlg.edit.set_text("test.txt")
save_dlg.save.click()

说明:type_keys()支持{enter}、^s等特殊键,menu_select()操作菜单。

案例:某公司用pywinauto模拟键盘录入crm数据,1000条记录从2小时降至10分钟。

实践:运行上述代码,在notepad输入文本并保存为test.txt。

5. 实战案例:excel自动化数据录入

场景:自动化向excel表格输入销售数据并保存。

步骤:

用application启动excel,打开工作簿。

用windowspecification定位工作表和单元格。

用键盘输入数据,鼠标点击保存。

代码:

from pywinauto import application
import time
 
# 启动excel
app = application(backend="uia").start(r"c:\program files\microsoft office\root\office16\excel.exe")
time.sleep(3)  # 等待excel启动
 
# 连接excel窗口
dlg = app.window(title_re=".*excel.*")
 
# 打开工作簿(ctrl+o)
dlg.type_keys("^o")
open_dlg = app["open"]
open_dlg.edit.set_text(r"c:\users\youruser\documents\sales.xlsx")
open_dlg.open.click()
time.sleep(1)
 
# 定位工作表编辑区域
sheet = dlg.child_window(control_type="edit").wrapper_object()
 
# 输入数据(3行)
sheet.type_keys("100{enter}200{enter}300")
 
# 保存并关闭(ctrl+s, alt+f4)
dlg.type_keys("^s")
time.sleep(1)
dlg.type_keys("%{f4}")

说明:time.sleep()确保窗口加载,control_type="edit"定位excel编辑区域。

案例:某零售公司用pywinauto自动化excel报表,处理5000条数据,效率提升95%。

实践:调整文件路径,运行上述代码,向excel输入3行数据并保存。

6. 模拟操作:执行自动化测试

场景:模拟用户输入、点击等操作。

方法:

用type_keys()输入文本,click()模拟鼠标点击。

支持快捷键(如ctrl+s)和复杂操作(如菜单选择)。

code(在notepad输入并保存):

from pywinauto import application
 
app = application(backend="win32").start("notepad.exe")
dlg = app["untitled - notepad"]
edit = dlg.edit
 
# 输入文本
edit.type_keys("hello, pywinauto!")
 
# 保存文件(ctrl+s)
dlg.type_keys("^s")
save_dlg = app["save as"]
save_dlg.edit.set_text("test.txt")
save_dlg.save.click()
case:某企业用pywinauto自动化excel数据录入,1000条数据从2小时缩短至10分钟。
practice:运行上述代码,在notepad输入文本并保存为test.txt。

调试与优化技巧

调试技巧:

控件定位:用inspect.exe或print_control_identifiers()确认控件属性,优先用control_type或auto_id。

稳定性:添加time.sleep()或dlg.wait("visible")等待窗口/控件就绪。

错误排查:捕获elementnotfounderror,打印控件树或窗口标题。

优化技巧:

pom模式:封装控件操作为类,提高脚本复用性。

pytest集成:自动化运行测试用例,生成allure报告。

复杂操作:用pywinauto.mouse精确控制坐标点击。

代码(pom封装excel操作):

from pywinauto import application
 
class excelapp:
    def __init__(self):
        self.app = application(backend="uia").start(r"c:\program files\microsoft office\root\office16\excel.exe")
        self.dlg = self.app.window(title_re=".*excel.*")
 
    def input_data(self, data):
        sheet = self.dlg.child_window(control_type="edit").wrapper_object()
        for value in data:
            sheet.type_keys(f"{value}{{enter}}")
 
    def save_and_close(self):
        self.dlg.type_keys("^s")
        self.dlg.type_keys("%{f4}")
 
# 使用
excel = excelapp()
excel.input_data([100, 200, 300])
excel.save_and_close()

案例:某团队用pom重构pywinauto脚本,ui变更后维护时间从2天降至2小时。

实践:用pom重构excel案例,运行测试。

注意事项与常见问题

注意事项:

后端选择:win32适合简单应用(如notepad),uia适合复杂wpf/winforms(如excel),测试前用inspect.exe确认。

控件动态性:控件id或标题可能随语言/版本变化,优先用control_type或正则表达式。

性能:避免过多time.sleep(),用wait()或wait_until()优化。

常见问题:

错误:elementnotfounderror

解决:检查窗口标题或控件属性,打印控件树确认。

错误:timeouterror

解决:延长等待时间或检查应用是否响应。

错误:invalidwindowhandle

解决:确保窗口未关闭,重新连接应用。

案例:某项目因控件id变化报错,用control_type定位后稳定运行。

实践:模拟一个错误(如错误标题),根据日志排查。

application

我们要控制软件的第一件事就是启动一个windows软件,每一个软件(进程)都是一个application对象

实例化application对象的时候可以传入一个backend参数,可选值为win32(默认)和uia 

  • win32对应的框架:mfc、vb6、vcl、简单的 winforms 控件和大多数旧的遗留应用程序
  • uia对应的框架:winforms、wpf、商店应用程序、qt5、浏览器

如果无法知道要测试的软件是属于哪种框架,可以使用 inspect(对应uia) 和 spy++(对应win32)看看,你看哪个显示得更全就选哪个。inspect和spy++需要自己安装一下

社会现象分析

pywinauto通过application启动/连接应用、windowspecification定位控件,结合键盘鼠标操作,轻松实现windows gui自动化。从notepad的简单输入到excel的复杂数据录入,五大步骤覆盖测试、rpa和数据处理全场景。掌握pywinauto,你不仅能解放双手,还能解锁无限自动化可能。无论是测试工程师还是rpa开发者,pywinauto都是你的武器。

pywinauto是windows自动化领域的明星工具。gartner 2024报告显示,桌面应用测试和rpa需求增长35%,pywinauto因开源和易用性备受青睐。其在gui测试中的灵活性,认为其“填补了windows自动化空白”。

开源社区(如pywinauto github)的star数超1.5万,反映开发者热情。企业中,pywinauto广泛用于erp、crm和金融系统自动化,如某银行用pywinauto自动化交易录入,效率提升80%。ai驱动的gui测试工具也在崛起,但pywinauto的轻量性和python生态优势使其仍占主流。

总结

在传统的测试场景中,web 自动化如 selenium 已非常成熟,但对于大量仍存在的桌面应用,许多公司依旧依赖手工测试,效率低下、成本高昂。而 pywinauto 的兴起,正填补了这一自动化盲区,帮助测试工程师全面掌控桌面测试环节。

pywinauto 不是黑魔法,而是一把趁手的工具。只要你熟悉 python 基础,就能轻松上手。它让测试不仅限于网页和接口,更延伸到桌面端,真正实现端到端的自动化闭环。

以上就是python pywinauto轻松实现windows桌面自动化详解的详细内容,更多关于python pywinauto自动化的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com