之前总有人在群里或者私信留言问:Windows 系统安装的软件如何自动化测试呢?因为没有接触过或者遇到过,所以说实话宏哥当时也不清楚怎么实现,怎么测试。然而在一次偶然的机会接触到了 Python 的一个模块说是它可以实现 Microsoft Windows GUI 自动化测试,宏哥就想试一下是不是可以实现了,于是就边学习边记录供小伙伴或者童鞋们学习参考。
目前流行的自动化就是 web,app,接口算是目前最主流的测试内容了,那么如果让做安装 windows 上的客户端自动化呢?是不是一脸懵?今天宏哥就给大家讲解和分享一下啊!!!
pywinauto 是一个用于 *Windows *GUI *自动化的 *Python 库。它允许你编写脚本来自动化 Windows 应用程序的操作,如点击按钮、输入文本、选择菜单项等。pywinauto 基于 pywin32 和 comtypes,提供了更高级和更易用的接口。
官网地址:https://pywinauto.readthedocs.io/en/latest/index.html
中文文档地址:https://www.kancloud.cn/gnefnuy/pywinauto_doc/1193035
1.宏哥的环境是 Windows 11 版本 64 位系统(32 位的同学自己想办法哦,当然了现在 32 位的一般很少见),如下图所示:
Python 版本:python:3.7.2,如下图所示:
Pywinauto 是一个强大的Python 库,用于自动化Windows 应用程序的界面操作。无论是进行 GUI 测试、数据采集还是自动化任务,Pywinauto 都能提供便捷的解决方案。
首先我们要安装好 Python,然后才能安装 Pywinauto,原因就不用宏哥多说了吧!因为 Pywinauto 是 Python 的库,所有得现有父亲才有儿子。具体如何安装 Python,宏哥在这里就不再赘述了,不会的小伙伴或者童鞋们可以看宏哥之前的文章:传送门 。
1.和安装其他依赖库一样,直接使用命令安装即可。可能要稍等一会....只需要一条命令,命令如下:
pip install pywinauto
1.确保你已经成功安装 Python 和 Pycharm 编辑器,点击"File" -> "Settings" -> "Project" -> "Python Interpreter"在"Project lnterpreter"下,点击"Add"并在搜索栏中输入要导入的模块名称搜索 pywinauto,然后点击 “install” 即可,如下图所示:
在网站:https://github.com/pywinauto/pywinauto/releases 中下载最新的 pywinauto,解压后,进入对应的目录中,cmd,然后运行命令如下:
python setup.py install
1.Docs 命令窗口
直接打开 docs 命令窗口输入 python,进行导入对应的库,看是否报错,如下图所示:
2.Pycharm 编辑器
打开 Pycharm 编辑器,在 Python 脚本中导入 Pywinauto 的必要模块,通常包括Application
和findwindows,看是否报错,如下图所示:
安装前(红色报错),如下图所示:
安装后(红色报错消失),如下图所示:
通过 pip list 命令查看,如下图所示:
到此,环境就搭建好了,是不是很简单哈,是不是 so easy。其实很简单的,就是一句命令就可以了,今天说的有点多,有点啰嗦哈!!!
安装好了之后,关于使用说明大家可以参照官方文档上的说明。
就是说在我们安装好 Pywinauto 之后,在启动应用程序之前,首先要确定哪种可访问性技术(pywinauto 的 backend)可以用于我们的应用程序,在 windows 上受支持的辅助功能技术有两种:
那么如何知道程序到底适用于那种 backend? 可以借助于 GUI 对象检查工具来确定程序到底适用于那种 backend。如果使用 inspect 的 uia 模式,可见的控件和属性更多的话,backend 可选 uia,反之,backend 可选 win32。
常用的一些元素定位工具: SPY++,用于 WIN32 API。当 SPY++ 可以显示所有的控件时,访问技术应该选择” win32”。 Inspect.exe:如果 Inspect.exe 的模式设置为 UIA 模式,可以比 SPY++ 显示更多的控件,则访问技术应该选择” uia”。 py_inspect:支持 win32 和 uia 两种访问技术,是 SWAPY 的替代。 UISPY:支持 uia 访问技术。 SWAPY:只支持 win32 访问技术。
1.inspect 教程:https://learn.microsoft.com/zh-cn/windows/win32/winauto/inspect-objects,如下图所示:
2.inspect.exe 是 windows SDK 的一个内置工具,可以通过先安装 Windows SDK,下载地址:https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/ 如下图所示:
3.下载后在本机安装,Inspect.exe 位于 SDK 安装路径的 \bin\文件夹中。通常不需要以管理员身份运行它。如下图所示:
4.它可以单独复制出来,放在桌面使用。
“检查” 窗口有多个主要部分:
1.菜单栏中提供的命令也可以在工具栏中使用。 下图显示了 “检查” 查询记事本中的 “编辑” 菜单元素的 UI 自动化属性。如下图所示:
2.以下是宏哥操作微信时候,工具的一些展示和变化,如下图所示:
1.官方文档中推荐使用 spy++ 和 inspect 来检查。宏哥专门整理了一下,放在 github 上了,关注宏哥的公众号发送:inspect,即可获取下载地址。有的人不知道公众号如何发送获取下载地址,经常是发私信。宏哥在这里也顺便演示一下,关注宏哥公众号后,点击 “发消息”,然后输入内容发送关键字,即可获取。如下图所示:
2.下载解压后的各种工具,如下图所示:
Spy++(定位元素工具(win32))
Inspect(定位元素工具(uia))
UI Spy(定位元素工具)
Swapy(可简单生成 pywinauto 代码)
目前大部分应用程序主窗口是 “uia”,一般都是先用 “uia',报错时再换成'win32'。这也是一种笨办法,二者选一,不是这个就是那个。
宏哥这里按官方推荐的介绍使用 inspect 来判断 backend 的类别,具体步骤如下:
1.下载上面 github 链接里的相关工具并打开,点击 inspect 左上角的下拉列表中切换到 UI Automation,如下图所示:
2.然后鼠标点一下你需要测试的程序窗体,inspect 就会显示相关信息。 下图为点击 window 文件夹的结果,inspect 中显示了相关的信息,如下图所示。说明 backend 为 uia。如下图所示:
3.相反,没有切换,点击任务管理器,拒绝访问,则为 win32,如下图所示:
宏哥这里以启动 Windows 自带的计算器为例,给各位小伙伴或者童鞋们来演示一下。
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-01-16
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Windows GUI自动化测试-1-pywinauto 环境搭建(上)(详细教程)
'''
# 3.导入模块
from pywinauto import Application
from pywinauto import findwindows
#启动计算器
app = Application().start("calc.exe")
1.运行代码,右键 Run'Test',就可以看到控制台输出,如下图所示:
2.运行代码后电脑端的动作(启动计算器)。如下图所示:
本文介绍了 Pywinauto 的基本使用方法,包括安装、导入模块、启动应用程序、如何判断程序的 backend 是’win32’ 还是’uia’。通过掌握这些基本概念和技巧,小伙伴或者童鞋们可以利用 Pywinauto 轻松实现自动化 Windows 界面操作,提高工作效率。希望本文对你入门 Pywinauto 有所帮助!