🔥PC端自动化测试实战教程-3-pywinauto 启动PC端应用程序 - 下篇(详细教程)

1.简介

经过上一篇的学习、介绍和了解,pywinauto的强大,不言而喻吧!宏哥讲解和分享的是电脑自带和安装的应用程序。有些小伙伴或者童鞋们已经迫不及待地私信宏哥,如果在电脑中这个应用程序已经启用了,我如何去启动这个已经启动的应用程序呢?各位别急,宏哥今天就会讲解和分享如何启动PC端已经启动的应用程序。

2.启动已启动的应用程序

上一篇的例子细心的小伙伴或者童鞋们会发现都是程序没有运行起来的,那么想要启动已经运行起来的程序应该怎么做?

connect() 在要启动自动化应用程序时使用。 要指定已在运行的应用程序,您需要指定以下之一:

  • process:应用程序的进程ID,例如app = Application().connect(process=2341)
  • handle:应用程序窗口的窗口句柄,例如,app = Application().connect(handle=0x010f0c)
  • path:进程的可执行文件的路径(GetModuleFileNameEx用于查找每个进程的路径并与传入的值进行比较),例如:app = Application().connect(path=r"c:\windows\system32\notepad.exe")
  • 或者指定窗口的参数的任意组合,这些都被传递给pywinauto.findwindows.find_elements() 函数。 例如:
ini 复制代码
  app = Application().connect(title_re=".*Notepad", class_name="Notepad") 

注意: 在使用connect*()之前,应用程序必须准备好(已启动)。

2.1通过进程号启动

宏哥今天这里以我们熟悉的大鹅QQ为例,进行演示!

1.如果我们想操作一个已经打开的应用程序,可以根据应用的进程号 PID 去操作,先查看应用进程PID,如下图所示:

2.通过connect()方法连接,process参数指定PID,PID是不固定的,每次启动都会变化。

2.1.1代码设计

2.1.2参考代码

python 复制代码
# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-04-12
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Windows GUI自动化测试-2-pywinauto 启动PC端应用程序(详细教程)
'''

# 3.导入模块

from pywinauto.application import Application
# 启动QQ
app = Application(backend="uia").connect(process=19288)
print(app)

2.1.3运行代码

1.运行代码,右键Run'Test',就可以看到控制台输出,如下图所示:

2.2通过窗口句柄启动

通过窗口句柄的形式打开。问题来了?怎么查看窗口句柄?

1.通过Inspect.exe查看窗口句柄,如下图所示:

handle 句柄Inspect.exe查看是16进制的,每次启动也会变化。

因为进程PID和handle 句柄每次启动都会变化,所以我们应该用参数的组合。

2.还可以通过前面说的viewWizard工具进行查看(将放大镜拖到已启动的应用程序),通过下图可以看到窗口的句柄为133326,如下图所示:

2.2.1代码设计

2.2.2参考代码

python 复制代码
# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-04-12
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Windows GUI自动化测试-2-pywinauto 启动PC端应用程序(详细教程)
'''

# 3.导入模块

from pywinauto.application import Application
# 启动QQ
app = Application(backend="uia").connect(process=10720,handle=0x1059C)
print(app)

2.2.3运行代码

1.运行代码,右键Run'Test',就可以看到控制台输出,如下图所示:

根据title 和 class 名称启动,根据title 和 class 名称连接也有缺点,必须窗口在桌面是开着的才行,挂后台的应用无法连上。

参考代码如下:

python 复制代码
# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-04-12
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Windows GUI自动化测试-2-pywinauto 启动PC端应用程序(详细教程)
'''

# 3.导入模块

from pywinauto.application import Application
# 启动QQ
app = Application('uia').connect(title_re="QQ", class_name="TXGuiFoundation")
print(app)

2.3应用程序路径

1.还可以根据exe应用程序的路径,路径是固定的,但是宏哥运行报错了。如下图所示:

2.宏哥猜测可能需要配置环境变量,配置好了,就应该可以,宏哥这里由于时间的关系没有实际操作,只是给提供一种解决思路。

2.3.1代码设计

2.3.2参考代码

python 复制代码
# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-04-12
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Windows GUI自动化测试-2-pywinauto 启动PC端应用程序(详细教程)
'''

# 3.导入模块

from pywinauto.application import Application
# 启动QQ
app = Application('uia').connect(path=r'D:\QQ\Bin\QQScLauncher.exe')
print(app)

2.4Desktop() 方法

还有另外一种连接方式, 通过Desktop 方法更简单。通过标题的方式打开。以计算器为例演示,有兴趣的自己可以尝试QQ。

2.4.1代码设计

2.4.2参考代码

python 复制代码
# -*- coding:utf-8 -*-

# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-04-12
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Windows GUI自动化测试-2-pywinauto 启动PC端应用程序(详细教程)
'''

# 3.导入模块
import pywinauto

# 通过窗口打开
app = pywinauto.Desktop()
win = app['计算器']
print(win)

2.4.3运行代码

1.运行代码,右键Run'Test',就可以看到控制台输出,如下图所示:

3.小结

到此PC端自带和安装的应用程序启动,以及已启动的自带和安装的应用程序启动,宏哥讲解和分享就介绍到这里,非常简单就是一句代码搞定。 好了,时间不早了今天就分享到这里,感谢你耐心地阅读!

相关推荐
JustHappy9 分钟前
古法编程秘籍(七):互联网到底是什么?把两台电脑怎么说话搞懂就够了
前端·后端·网络协议
老毛肚12 分钟前
jeecg-boot-base-core 02 day
javascript·python
snow@li13 分钟前
SEO-文章标题:写文章时候,分类+主标题+大纲+解释 作为标题 / 不点进去也知道全文覆盖什么 / 标题即架构
前端
yaoxin52112319 分钟前
434. Java 日期时间 API - Period 基于日期的时间段
java·开发语言·python
kyriewen1 小时前
Git Commit 前自动修复代码风格?配置 Husky + lint-staged,从此 CR 只聊逻辑
前端·git·面试
岁月宁静1 小时前
RAG 文档摄入全链路,从原理到生产落地
vue.js·人工智能·python
小和尚同志1 小时前
AI 自动化测试探索(一):Playwright MCP
前端·人工智能·aigc
caimouse1 小时前
Reactos 第 8 章 结构化异常处理 — 8.2 系统空间的结构化异常处理
windows
JaydenAI2 小时前
[对比学习LangChain和MAF-07]如何引入人机交互的审批流程
python·ai·langchain·c#·agent·hitl·maf
老马识途2.02 小时前
在AI的帮助下理解spring的启动过程
java·前端·spring