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

embedded/2025/2/12 17:56:33/

1.简介

上一篇宏哥主要讲解和介绍了如何获取PC端应用程序窗口信息和如何连接窗口对其进行操作的常用的几种方法。今天宏哥接着讲解和分享一下窗口的基本操作:最大化、最小化、恢复正常、关闭窗口、获取窗口状态和获取窗口坐标。以及窗口的其他打开方法和选择方法。

2.窗口的基本操作

窗口的一些基本操作方法:

  • 最大化 :w.maximize()
  • 最小化 :w.minimize()
  • 恢复正常 :w.restore()
  • 关闭窗口: w.close()
  • 获取窗口状态: w.get_show_state() 返回1 最大化, 0正常,2最小化
  • 获取窗口坐标: w.rectangle() 返回 (L35, T149, R1544, B913)
2.1代码设计

2.2参考代码
python"># -*- coding:utf-8 -*-# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-01-31
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: PC端自动化测试实战教程-5-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("北京-宏哥")
time.sleep(2)
win.maximize()   # 最大化
time.sleep(2)
win.restore()    # 恢复
time.sleep(2)
win.minimize()   # 最小化
# win.close()      # 关闭
2.3运行代码

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

2.运行代码后电脑端的动作(启动记事本)。如下图所示:

3.窗口打开方法

前面是通过窗口的的标题操作打开的窗口,再介绍一个最简单的方法是top_window(),例如:宏哥这里还是演示打开notepad++编辑器。

3.1代码设计

3.2参考代码
python"># -*- coding:utf-8 -*-# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-01-31
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: PC端自动化测试实战教程-5-pywinauto 操作PC端应用程序窗口(详细教程)-下篇
'''# 3.导入模块
from pywinauto import Application
import timefrom pywinauto import Application
import time
app = Application('uia').start("D:/software/Notepad/Notepad++/notepad++.exe")
# time.sleep(3)
dlg = app.top_window()
print(dlg)
3.3运行代码

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

2.运行代码后电脑端的动作(启动notepad++编辑器)。如下图所示:

以上方法将返回具有应用程序顶级窗口的最高顺序的窗口。

注意: 它返回的是是应用程序的顶级窗口,如果窗口有覆盖的情况,那么你可以使用与传递给findwindows.find_windows()相同的参数,例如:

dlg = app.window(title_re="Page Setup", class_name="#32770")

如果对话框的标题很长 - 那么输入的属性访问可能会很长,在这种情况下通常更容易使用

app.window(title_re=".*部分标题.*") 

获取当前应用全部windows

dialogs = app.windows() 

这将返回应用程序的所有可见,启用的顶级窗口的列表。

总结:推荐使用 app.window(title_re="xxx") 方法操作指定窗口。

4.小结

 4.1遇到的坑

在演示的过程中,想必细心的小伙伴或者童鞋们已经发现宏哥代码在窗口最小化之后,将窗口关闭的代码注释掉了,这是因为宏哥在演示的时候,直接报错:pywinauto.findbestmatch.MatchError: Could not find '新文件1 - Notepad++' in 'dict_keys([])',本来宏哥觉得最小化之后,加上一段恢复窗口,再关闭就可以了,结果还是报一样的错误。因为一时没有好的解决办法,由于时间的关系,宏哥就将那段关闭窗口的代码注释掉了。如下图所示:

解决办法:经过查找资料和百度还是没有什么好的解决办法,宏哥突然想到之前文章中提到过的访问技术是否正确,uia报错,就换win32。否则就会报错找不到元素。因此宏哥抱着试一下心态,结果成功了。

4.1.1代码设计

4.1.2参考代码
python"># -*- coding:utf-8 -*-# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-01-31
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: PC端自动化测试实战教程-5-pywinauto 操作PC端应用程序窗口(详细教程)-下篇
'''# 3.导入模块
from pywinauto import Application
import time# 通过窗口打开
app = Application('win32').start("D:/software/Notepad/Notepad++/notepad++.exe")
app = Application('win32').connect(class_name="Notepad++")
# win = app['窗口的标题']
win = app['新文件1 - Notepad++']
win.type_keys("北京-宏哥")
time.sleep(2)
win.maximize()   # 最大化
time.sleep(2)
win.restore()    # 恢复
time.sleep(2)
win.minimize()   # 最小化
win.restore()    # 恢复
win.close()      # 关闭
4.1.3运行代码

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

2.运行代码后电脑端的动作(正常运行,由告警是32位和64位python的告警)。如下图所示:

4.2pywinauto 中的uia是什么意思?

在pywinauto库中,uia指的是UI Automation,这是Windows操作系统提供的一种技术框架,用于实现用户界面(UI)的自动化测试和辅助功能访问。UI Automation是微软从Windows Vista开始引入的核心技术,旨在为所有UI元素提供一致的编程接口,无论这些元素是由何种技术(如Win32、WPF、UWP等)实现的。

在pywinauto中,通过指定backend="uia",用户可以选择使用UI Automation作为底层引擎来与应用程序的UI元素进行交互。这为自动化测试提供了更广泛的支持,尤其是在处理现代Windows应用(尤其是使用WPF和UWP技术构建的应用)时更为有效。UI Automation后端相比传统的win32后端,提供了更丰富和高级的元素属性、控制模式(Control Patterns)以及事件支持,使得自动化脚本可以更加灵活和强大。

使用UI Automation后端,开发者可以更容易地定位和操作UI元素,如获取元素的属性、模拟鼠标和键盘操作、监听UI事件等,这对于创建复杂的自动化测试场景尤其有用。

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


http://www.ppmy.cn/embedded/161656.html

相关文章

服务器有多少线程?发起一个请求调用第三方服务,是新增加一个请求吗?如果服务器线程使用完了怎么办?

目录 1. 服务器有多少线程? (1)服务器类型 (2)配置参数 (3)硬件资源 2. 发起一个请求调用第三方服务,是新增加一个线程吗? (1)同步调用 (2)异步调用 (3)HTTP 客户端 3. 如果服务器线程使用完了怎么办? (1)请求被拒绝 (2)性能下降 (3)解决方案…

HTML5--网页前端编程(下)

HTML5–网页前端编程(下) 9.常用标签下 (1)表格标签 用来展示数据,显示数据,规整条理,可读性好 基本语法 <table><tr> <td>单元格内的文字</td> <td>单元格内的文字</td>… </tr> <tr> <td>单元格内的文字&l…

关于JVM

本文分为两部分&#xff0c;一部分对JVM进行大致总结&#xff0c;第二部分为对周志明的JVM进行梳理 一&#xff1a;大致总结 首先利用上面这张图来大致说一下JVM&#xff1a;首先把一个.java文件编译为一个.class文件&#xff08;我们可以认为.java是用java写的&#xff0c;.c…

数据结构--八大排序算法

1. 直接插入排序 当插入第 i(i>1) 个元素时&#xff0c;前面的 array[0],array[1],…,array[i-1] 已经排好序&#xff0c;此用 array[i] 的排序码与 array[i-1],array[i-2],… 的排序码顺序进行比较&#xff0c;找到插入位置即将 array[i] 插入&#xff0c;原来位置上的元素…

HTTP/3与QUIC的关系是什么?

HTTP/3 和 QUIC 之间的关系非常密切。以下是两者的定义及其相互关系的详细说明: 一、QUIC 协议 QUIC(Quick UDP Internet Connections)是一种基于 UDP 的传输层协议,由 Google 开发。QUIC 的主要目标是通过减少延迟、提高连接的可靠性和安全性来改善互联网协议的性能。QUI…

2月9日QT

优化登录框&#xff1a; 当用户点击取消按钮&#xff0c;弹出问题对话框&#xff0c;询问是否要确定退出登录&#xff0c;并提供两个按钮&#xff0c;yes|No&#xff0c;如果用户点击的Yes&#xff0c;则关闭对话框&#xff0c;如果用户点击的No&#xff0c;则继续登录 当用户…

基于YoloV11和驱动级鼠标模拟实现Ai自瞄

本文将围绕基于 YoloV11 和驱动级鼠标实现 FPS 游戏 AI 自瞄展开阐述。 需要着重强调的是&#xff0c;本文内容仅用于学术研究和技术学习目的。严禁任何个人或组织将文中所提及的技术、方法及思路应用于违法行为&#xff0c;包括但不限于在各类游戏中实施作弊等违规操作。若因违…

Oracle入门精读03_Oracle11g安装目录及子目录的结构简介

在Windows2012 Server R2&#xff0c;个人把 Oracle Database 11g安装于硬盘D,如下&#xff1a; 在Oracle Database 11g中&#xff0c;Oracle的目录结构是由Oracle_Base及其子目录cfgtoollogs 、diag 、product、admin、flash_recovery_area和oradata等。这个与Oracle 10G不同的…