1. 为什么要做 GUI 自动化

1.1 GUI 自动化的意义

在软件测试过程中,有许多重复性的测试用例需要执行,例如对软件的各种基本功能进行验证。如果手动测试,测试人员需要不断地重复相同的操作步骤,这不仅耗时而且容易出错。而 GUI 自动化测试工具可以在短时间内快速执行大量重复的测试用例,并且能够始终按照预设的逻辑和步骤进行操作,从而极大地提高了测试效率。

在这里插入图片描述

通过 GUI 自动化测试,可以减少对人力的依赖。原本需要多名测试人员花费数小时甚至数天才能完成的测试工作,现在只需编写好自动化测试脚本,由自动化测试工具在规定时间内完成,这样可以将测试人员从繁琐的重复性工作中解放出来,在一定程度上降低了人力成本。

1.2 GUI 自动化适用场景

GUI 自动化适用于各种需要对图形用户界面进行重复性、一致性测试的场景,尤其在验证软件功能的稳定性、正确性和用户体验方面发挥着重要作用。

在软件开发的各个阶段,从集成测试到验收测试,它都可以帮助测试人员快速发现潜在问题,如界面元素是否正常显示、交互是否流畅、功能是否按预期工作等,从而确保软件质量。

GUI 自动化可以模拟不同用户环境下的操作,测试其兼容性和稳定性。此外,在进行大规模测试时,它能显著提高测试效率,减少人力成本,快速提供反馈,支持持续集成和持续交付,加速软件开发周期。

总之,GUI 自动化适用于需要高效、准确、重复测试GUI应用程序的各种场景,有助于提升软件质量、用户满意度和开发效率。需要注意的是,尽管 GUI 自动化适用于上述场景,但其成功依赖于界面元素的稳定性 —— 若 UI 频繁变动或涉及复杂交互,维护成本可能陡增。

2. 为什么选择 pywinauto

Pywinauto 是一款基于 Python 的跨平台 GUI 自动化库,专门针对 Windows 桌面应用程序设计,其核心能力在于通过模拟用户交互行为(如鼠标点击、键盘输入)实现对窗口、对话框及内部控件的精准定位与操作,适用于自动化测试、批量任务处理及日常办公流程优化等场景。

该库通过两种底层技术(backend=“win32” 和 backend=“uia”)适配不同框架开发的应用程序:

  • win32 模式适用于传统 MFC、VB6 等旧架构。
  • uia 模式则支持现代 WinForms、WPF、Qt5 及浏览器等应用。

2.1 pywinauto 的优势

优势如下所示:

  • 基于 Python:Python 语言简洁易学,适合快速开发和维护。
  • 跨平台支持:支持 Windows 7 及以上版本,兼容性良好。
  • 丰富的控件支持:支持 Windows 原生控件(如按钮、文本框、表格)以及第三方控件(如 WPF、Qt)。
  • 动态查找机制:自动等待控件加载完成,无需显式等待。
  • 强大的调试工具:提供 pywinauto.findwindows 模块,方便定位控件。
  • 社区活跃:开源项目,持续更新,文档和示例丰富。

2.2 pywinauto 的局限性

局限如下所示:

  • 仅支持 Windows:无法用于 Mac 或 Linux 平台。
  • 对非标准控件支持有限:某些自定义控件可能需要额外处理。

注意:pywinauto 支持传统 Windows 原生应用框架和部分跨平台框架(需在 Windows 运行),以下是一些无法使用 pywinauto 实现 GUI 自动化的应用程序分类,以及原因:

1)基于 Web 的应用程序

  • 原因:pywinauto 是为本地 Windows 应用程序设计的,无法直接与基于浏览器的 Web 应用程序交互。Web 应用程序的自动化通常需要使用如 Selenium 这样的工具。
  • 示例:Google Chrome 中打开的任何网页或基于 Web 的企业应用。

2)基于自定义渲染引擎的应用程序

  • 原因:某些应用程序(如使用 Flutter、React Native 或其他跨平台框架开发的应用)可能使用自定义的渲染引擎,这些引擎不会暴露标准的 Windows UI 自动化接口(如 Win32 或 UIA)。
  • 示例:企微、某些使用 Flutter 开发的桌面应用。

如何分辨什么是基于Web的应用程序、使用自定义渲染框架的应用程序?

3. 安装 pywinauto

首先确保已安装 Python 环境(推荐 3.7 或更高版本)。

接着创建一个新的文件夹,以及虚拟 Python 环境

在这里插入图片描述

然后安装 pywinauto:

# 指定版本号,避免因为版本差异造成其他问题
pip install pywinauto==0.6.9

结果如下所示:

在这里插入图片描述

安装完成后,可以通过以下命令验证安装:

pip list

如果输出中包含 pywinauto,则说明安装成功。

在这里插入图片描述

4. 安装 UI 对象检查工具

如何进行元素定位?打开页面开发者工具,可以直接进行元素定位,定位到元素之后才能对指定元素进行一系列的操作,对于GUI自动化也是一样,要想对界面的元素进行操作,我们得先会 “找元素”,而找元素我们需要用 UI 对象检查工具,

UI 对象检查工具有很多,诸如 Spy++、Inspect.exe、UISpy,这些工具基本都长得一样,且操作上基本无差,这里统一使用 UISpy 工具来进行 UI 对象检查。

  • UISpy 是一款由微软提供的工具,专门用于 UI 自动化测试。它允许测试人员查看应用程序的 UI 自动化模型,包括控件树、属性和事件。 UISpy 特别适用于编写 UI 自动化脚本,因为它提供了一个可视化的界面来帮助测试人员选择 UI 元素,并且可以模拟用户对这些 UI 元素的操作。

在这里插入图片描述

那么如何分辨是否能用 pywinauto 进行自动化测试的应用程序呢?应用程序可以通过 UI 对象检查工具定位到元素,说明该元素的实现是支持传统 Windows 原生应用框架,而无法识别的元素则属于不能用 pywinauto 进行自动化测试的(例如企微)

5. GUI 自动化简单示例

示例:打开电脑自带记事本,输入内容,并保存文件。

import time
from pywinauto.application import Application

# 1. 启动应用程序
Application(backend="uia").start("notepad.exe")
time.sleep(2)  # 等待 2 秒让记事本完全打开

# 2. 精确连接到刚刚打开的“无标题 - 记事本”
app = Application(backend="uia").connect(title="无标题 - 记事本")

# 3. 获取窗口对象(直接获取该进程的顶层窗口,防止标题对不上)
notepad = app.top_window()

# 4. 操作控件:在 Win10 的 Edit 控件中输入文本
notepad.Edit.type_keys("Hello, Pywinauto!", with_spaces=True)
print("输入成功!\n")

# 5. 关闭应用程序
time.sleep(1) # 稍微停顿一下让你看清文字输入进去了
notepad.close()

结果如下所示:

在这里插入图片描述

更多推荐