前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >PC端自动化测试实战教程-3-pywinauto 启动PC端应用程序 - 下篇(详细教程)

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

原创
作者头像
北京-宏哥
发布2025-01-20 08:33:11
发布2025-01-20 08:33:11
16800
代码可运行
举报
运行总次数:0
代码可运行

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() 函数。 例如:
  • 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参考代码

代码语言:javascript
代码运行次数:0
复制
# -*- coding:utf-8 -*-

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

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-01-20
@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参考代码

代码语言:javascript
代码运行次数:0
复制
# -*- coding:utf-8 -*-

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

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-01-20
@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 名称连接也有缺点,必须窗口在桌面是开着的才行,挂后台的应用无法连上。

 参考代码如下:

代码语言:javascript
代码运行次数:0
复制
# -*- coding:utf-8 -*-

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

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-01-20
@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参考代码

代码语言:javascript
代码运行次数:0
复制
# -*- coding:utf-8 -*-

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

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-01-20
@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参考代码

代码语言:javascript
代码运行次数:0
复制
# -*- coding:utf-8 -*-

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

# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-01-20
@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端自带和安装的应用程序启动,以及已启动的自带和安装的应用程序启动,宏哥讲解和分享就介绍到这里,非常简单就是一句代码搞定。 好了,时间不早了今天就分享到这里,感谢你耐心地阅读!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.简介
  • 2.启动已启动的应用程序
    • 2.1通过进程号启动
      • 2.1.1代码设计
      • 2.1.2参考代码
      • 2.1.3运行代码
    • 2.2通过窗口句柄启动
      • 2.2.1代码设计
      • 2.2.2参考代码
      • 2.2.3运行代码
    • 2.3应用程序路径
      • 2.3.1代码设计
      • 2.3.2参考代码
    • 2.4Desktop() 方法
      • 2.4.1代码设计
      • 2.4.2参考代码
      • 2.4.3运行代码
  • 3.小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档