前几篇通过宏哥的讲解和分享,已经知道如何将PC端的应用程序启动,以及如何连接已启动的应用程序,那么启动和连接上之后呢?不用说当然是操作应用程序了,怎么操作呢?请听宏哥给你娓娓道来,所以今天主要是讲解和分享一下如何操作PC端应用程序的窗口。
窗口就是应用软件上面的工具栏,操作栏,弹出菜单,对话框等,这些基本上为windows软件应用比较多的地方。它通常具有带有标题栏、 最小化和最大化按钮以及其他标准 UI 元素的框架。 有兴趣的可以看一下这里有详细的介绍:什么是窗口 - Win32 apps | Microsoft Learn
宏哥这里介绍和分享两种方法:一种是通过工具获取,另一种是通过代码获取。
1.直接通过inspect工具进行获取窗口信息,启动记事本,可以通过inspect.exe 查看窗口信息。如下图所示:
2.主要看2个属性,窗口的标题,也就是左上角我们看到的还有一个是查看的class属性,只能通过工具查看。如下图所示:
通过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社区会更新版本修复这一问题。
1.Windows10系统
2.Windows11系统
1.Windows10系统
# -*- 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系统
# -*- 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()
1.运行代码,右键Run'Test',就可以看到控制台输出,如下图所示:
2.运行代码后电脑端的动作(启动notepad++,宏哥这里是Windows11系统)。如下图所示:
启动PC端的软件后,会出现软件的窗口界面,首先获取到窗口的信息,然后我们需要根据获取到的窗口信息连接到窗口,然后选择我们要测试的窗口,只有选择到要测试的窗口后,我们才能进行操作。如果你都无法选择到要测试窗口,何谈下一步的操作和自动化测试呢?因此接着宏哥介绍几种选择窗口的方法,其实之前的文章中已经或多或少的宏哥已经提及到,因为比较重要,因此宏哥在这里单独将其拎出来介绍和讲解一下。宏哥这里介绍和分享以下三种方法,通过选择notepad++的窗口,然后输入“北京-宏哥”。宏哥在Windows11系统演示,Windows10以下可以参考前边宏哥提到的代码,比Windows11简单多了。
通过窗口的属性值进行获取,代码如下:
win = app['属性值']
通过className属性值,代码如下:
# -*- 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("北京-宏哥")
1.运行代码,右键Run'Test',就可以看到控制台输出,如下图所示:
2.运行代码后电脑端的动作(启动notepad++,输入文本:北京-宏哥)。如下图所示:
通过窗口的标题获取,代码如下:
win = app['窗口的标题']
# -*- 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("北京-宏哥")
1.运行代码,右键Run'Test',就可以看到控制台输出,如下图所示:
2.运行代码后电脑端的动作(启动notepad++,输入文本:北京-宏哥)。如下图所示:
这种点窗口名称的写法,只适合于一些英文的className属性,一些中文的标题,或者有特殊符号就会报语法错误。
通常用窗口的标题操作更稳定一些,用class名称有时候会报错找不到。
通过窗口的类名进行获取,代码如下:
win = app.类名
# -*- 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("北京-宏哥")
1.运行代码,右键Run'Test',就可以看到控制台输出,如下图所示:
2.运行代码后电脑端的动作(启动notepad++,输入文本:北京-宏哥)。如下图所示:
今天主要讲解和分享了如何操作PC端应用程序的窗口、获取窗口信息、选择窗口,以及Windows10系统和Windows11系统代码的区别,主要是多了一段连接窗口的代码。如果缺少这一段代码就会报错:pywinauto.findwindows.ElementNotFoundError: {'best_match': '新文件 1 - Notepad++', 'backend': 'uia', 'process': 12464}。如下图所示:
解决方法:上网和社区查了好多资料,都说没有解决办法,宏哥就自己试了一下,加上那段连接到窗口的代码就没有问题了,代码如下:
app = Application('uia').connect(class_name="Notepad++")
但是,宏哥试了记事本还是不可以,notepad++编辑器是可以了。真是奇怪了。。。。
你如果想要像启动记事本一样启动notepad++,你只需要配置notepad++的环境变量即可,如何配置,宏哥就不在这里赘述了,自己网上找一下,特别多,都是一样套路,或者是换汤不换药。然后代码就可以按照如下方式写:
app = Application('uia').start("notepad++.exe")
好了,关于 操作PC端应用程序窗口相关操作非常简单,时间不早了今天就分享到这里,感谢你耐心地阅读!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。