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

PC端自动化测试实战教程-4-pywinauto 操作PC端应用程序窗口 - 上篇(详细教程)

原创
作者头像
北京-宏哥
发布2025-01-21 08:30:54
发布2025-01-21 08:30:54
25500
代码可运行
举报
运行总次数:0
代码可运行

1.简介

前几篇通过宏哥的讲解和分享,已经知道如何将PC端的应用程序启动,以及如何连接已启动的应用程序,那么启动和连接上之后呢?不用说当然是操作应用程序了,怎么操作呢?请听宏哥给你娓娓道来,所以今天主要是讲解和分享一下如何操作PC端应用程序的窗口。

2.什么是窗口

窗口就是应用软件上面的工具栏,操作栏,弹出菜单,对话框等,这些基本上为windows软件应用比较多的地方。它通常具有带有标题栏、 最小化和最大化按钮以及其他标准 UI 元素的框架。 有兴趣的可以看一下这里有详细的介绍:什么是窗口 - Win32 apps | Microsoft Learn

3.如何获取窗口信息

宏哥这里介绍和分享两种方法:一种是通过工具获取,另一种是通过代码获取。

3.1方法1-工具

1.直接通过inspect工具进行获取窗口信息,启动记事本,可以通过inspect.exe 查看窗口信息。如下图所示:

2.主要看2个属性,窗口的标题,也就是左上角我们看到的还有一个是查看的class属性,只能通过工具查看。如下图所示:

3.2方法2-代码

通过print_control_identifiers()方法,print_control_identifiers()方法进行获取该应用下的所以窗口或组件内容(宏哥这里由于是Windows11系统用这个方法打开获取记事本窗口信息会报错)。查了好多资料以及去pywinauto社区查找都没找到解决办法,而且网上好多人都遇到了这个问题,因此宏哥这里用notepad++这款编辑器给小伙伴或者童鞋们来演示一下。其实用notepad++这款编辑器按照Windows10系统代码的写法也会报错:pywinauto.findwindows.ElementNotFoundError: {'class_name': 'Notepad', 'visible_only': True, 'backend': 'uia'} 。但是宏哥自己想了一种解决办法:手动调用connect()给予额外的时间缓冲,可能恰好让UI准备就绪。然后就可以了,宏哥试过记事本了,仍然不行。后边宏哥如想到解决办法,会写文章告知的,要是没有解决方法,就不写相关文章,或者后期微软或者pywinauto社区会更新版本修复这一问题。

3.2.1代码设计

1.Windows10系统

2.Windows11系统

3.2.2参考代码

1.Windows10系统

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

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

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

# 3.导入模块
from pywinauto import Application
import time

# 通过窗口打开
app = Application('uia').start("D:/software/Notepad/Notepad++/notepad++.exe")
win = app['新文件 1 - Notepad++']
print(win)
print(app.process)
win.print_control_identifiers()

2.Windows11系统

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

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

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

# 3.导入模块
from pywinauto import Application
import time

# 通过窗口打开
app = Application('uia').start("D:/software/Notepad/Notepad++/notepad++.exe")
app = Application('uia').connect(class_name="Notepad++")
win = app['新文件 1 - Notepad++']
print(win)
print(app.process)
win.print_control_identifiers()

3.3.3运行代码

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

2.运行代码后电脑端的动作(启动notepad++,宏哥这里是Windows11系统)。如下图所示:

4.如何选择窗口?

启动PC端的软件后,会出现软件的窗口界面,首先获取到窗口的信息,然后我们需要根据获取到的窗口信息连接到窗口,然后选择我们要测试的窗口,只有选择到要测试的窗口后,我们才能进行操作。如果你都无法选择到要测试窗口,何谈下一步的操作和自动化测试呢?因此接着宏哥介绍几种选择窗口的方法,其实之前的文章中已经或多或少的宏哥已经提及到,因为比较重要,因此宏哥在这里单独将其拎出来介绍和讲解一下。宏哥这里介绍和分享以下三种方法,通过选择notepad++的窗口,然后输入“北京-宏哥”。宏哥在Windows11系统演示,Windows10以下可以参考前边宏哥提到的代码,比Windows11简单多了。

4.1方法1-窗口属性值

通过窗口的属性值进行获取,代码如下:

代码语言:javascript
代码运行次数:0
复制
win = app['属性值']

4.1.1代码设计

通过className属性值,代码如下:

4.1.2参考代码

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

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

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

# 3.导入模块
from pywinauto import Application
import time

# 通过窗口打开
app = Application('uia').start("D:/software/Notepad/Notepad++/notepad++.exe")
app = Application('uia').connect(class_name="Notepad++")
# win = app['属性']
win = app['Notepad']
win.type_keys("北京-宏哥")

4.1.3运行代码

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

2.运行代码后电脑端的动作(启动notepad++,输入文本:北京-宏哥)。如下图所示:

4.2方法2-窗口标题

通过窗口的标题获取,代码如下:

代码语言:javascript
代码运行次数:0
复制
win = app['窗口的标题'] 

4.2.1代码设计

4.2.2参考代码

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

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

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

# 3.导入模块
from pywinauto import Application
import time

# 通过窗口打开
app = Application('uia').start("D:/software/Notepad/Notepad++/notepad++.exe")
app = Application('uia').connect(class_name="Notepad++")
# win = app['窗口的标题']
win = app['新文件1 - Notepad++']
win.type_keys("北京-宏哥")

4.2.3运行代码

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

2.运行代码后电脑端的动作(启动notepad++,输入文本:北京-宏哥)。如下图所示:

4.3方法3-窗口类名(不推荐)

这种点窗口名称的写法,只适合于一些英文的className属性,一些中文的标题,或者有特殊符号就会报语法错误。

通常用窗口的标题操作更稳定一些,用class名称有时候会报错找不到。

 通过窗口的类名进行获取,代码如下:

代码语言:javascript
代码运行次数:0
复制
win = app.类名

4.3.1代码设计

4.3.2参考代码

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

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

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

# 3.导入模块
from pywinauto import Application
import time

# 通过窗口打开
app = Application('uia').start("D:/software/Notepad/Notepad++/notepad++.exe")
app = Application('uia').connect(class_name="Notepad++")
# win = app.类名
win = app.Notepad
win.type_keys("北京-宏哥")

4.3.3运行代码

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

2.运行代码后电脑端的动作(启动notepad++,输入文本:北京-宏哥)。如下图所示:

 5.小结

5.1遇到的问题

今天主要讲解和分享了如何操作PC端应用程序的窗口、获取窗口信息、选择窗口,以及Windows10系统和Windows11系统代码的区别,主要是多了一段连接窗口的代码。如果缺少这一段代码就会报错:pywinauto.findwindows.ElementNotFoundError: {'best_match': '新文件 1 - Notepad++', 'backend': 'uia', 'process': 12464}。如下图所示:

解决方法:上网和社区查了好多资料,都说没有解决办法,宏哥就自己试了一下,加上那段连接到窗口的代码就没有问题了,代码如下:

代码语言:javascript
代码运行次数:0
复制
app = Application('uia').connect(class_name="Notepad++")

但是,宏哥试了记事本还是不可以,notepad++编辑器是可以了。真是奇怪了。。。。

5.2环境变量

你如果想要像启动记事本一样启动notepad++,你只需要配置notepad++的环境变量即可,如何配置,宏哥就不在这里赘述了,自己网上找一下,特别多,都是一样套路,或者是换汤不换药。然后代码就可以按照如下方式写:

代码语言:javascript
代码运行次数:0
复制
app = Application('uia').start("notepad++.exe")

好了,关于 操作PC端应用程序窗口相关操作非常简单,时间不早了今天就分享到这里,感谢你耐心地阅读!

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.简介
  • 2.什么是窗口
  • 3.如何获取窗口信息
    • 3.1方法1-工具
    • 3.2方法2-代码
      • 3.2.1代码设计
      • 3.2.2参考代码
      • 3.3.3运行代码
  • 4.如何选择窗口?
    • 4.1方法1-窗口属性值
      • 4.1.1代码设计
      • 4.1.2参考代码
      • 4.1.3运行代码
    • 4.2方法2-窗口标题
      • 4.2.1代码设计
      • 4.2.2参考代码
      • 4.2.3运行代码
    • 4.3方法3-窗口类名(不推荐)
      • 4.3.1代码设计
      • 4.3.2参考代码
      • 4.3.3运行代码
  •  5.小结
    • 5.1遇到的问题
    • 5.2环境变量
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档