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系统

# -*- 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()
3.3.3运行代码

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

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

4.如何选择窗口?

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

4.1方法1-窗口属性值

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

win = app['属性值']
4.1.1代码设计

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

4.1.2参考代码
# -*- 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-窗口标题

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

win = app['窗口的标题'] 
4.2.1代码设计

4.2.2参考代码
# -*- 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名称有时候会报错找不到。

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

win = app.类名
4.3.1代码设计

4.3.2参考代码
# -*- 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}。如下图所示:

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

app = Application('uia').connect(class_name="Notepad++")

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

5.2环境变量

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

app = Application('uia').start("notepad++.exe")

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

PC端自动化测试实战教程-4-pywinauto 操作PC端应用程序窗口 - 上篇(详细教程)的更多相关文章

  1. 《手把手教你》系列进阶篇之3-python+ selenium自动化测试 - python几种骚操作你都知道吗?(详细教程)

    1. 简介 这篇文章主要是给小伙伴或者童鞋们介绍和分享 python几种骚操:读取配置文件.获取根目录的相对路径.获取系统时间和格式化时间显示.字符串切割等等操作.为后边的自动化框架打下一个结实的基础 ...

  2. 《手把手教你》系列进阶篇之4-python+ selenium自动化测试 - python几种超神操作你都知道吗?(详细教程)

    1. 简介 今天分享和讲解的超神操作,对于菜鸟来说是超神的操作,对于大佬来说也就是几个简单方法的封装和调用.这里讲解和分享这部分主要是为了培养小伙伴们和童鞋们的面向对象的开发思维,对比这样做的好处让你 ...

  3. Java自动化测试框架-04 - TestNG之Test Method篇 - 道法自然,法力无边(详细教程)

    简介 按照上一篇的计划,这一篇给小伙伴们分享一下测试方法. 一.设置参数 测试方法是可以带有参数的.每个测试方法都可以带有任意数量的参数,并且可以通过使用TestNG的@Parameters向方法传递 ...

  4. Java自动化测试框架-07 - TestNG之Factory篇 - 欢快畅游梦幻工厂(详细教程)

    简介 最近忙着装修博客园,没时间更新文章,今天终于抽出时间把上次写的一半的文章给写完了,新的博客园风格,希望大家喜欢.今天继续介绍testng的相关知识--工厂. 工厂允许你动态的创建测试.例如,假设 ...

  5. 《手把手教你》系列练习篇之9-python+ selenium自动化测试 -番外篇 - 最后一波啊!!!(详细教程)

    1. 简介 本来上一篇就是练习篇的最后一篇文章了,但是有的小伙伴私下反映说是做了那么多练习,没有一个比较综合的demo练练手.因此宏哥在这里又补存了一些常见的知识点进行练习,在文章最后也通过实例给小伙 ...

  6. 《手把手教你》系列技巧篇(七)-java+ selenium自动化测试-宏哥带你全方位吊打Chrome启动过程(详细教程)

    1.简介 经过前边几篇文章和宏哥一起的学习,想必你已经知道了如何去查看Selenium相关接口或者方法.一般来说我们绝大多数看到的是已经封装好的接口,在查看接口源码的时候,你可以看到这个接口上边的注释 ...

  7. Qt5 项目程序打包发布 详细教程

    概述 当我们用QT写好了一个软件,要把你的程序分享出去的时候,不可能把编译的目录拷贝给别人去运行.编译好的程序应该是一个主程序,加一些资源文件,再加一些动态链接库,高大上一些的还可以做一个安装文件. ...

  8. 关于《Python自动化测试实战》

    作者有话说 笔者写这本书的初心是想通过自身经验分享一些在自动化测试领域中的实用技术,能够帮助那些正在从事自动化测试相关工作或者准备转型自动化测试的测试人员.任何一门技术涵盖的知识点都是非常广泛的,可能 ...

  9. appium自动化测试实战

    一.Appium的介绍   Appium是一款开源的自动化测试工具,其支持iOS和安卓平台上的原生的,基于移动浏览器的,混合的应用. 1. 使用appium进行自动化测试的好处 Appium在不同平台 ...

  10. WebRTC VideoEngine超详细教程(三)——集成X264编码和ffmpeg解码

    转自:http://blog.csdn.net/nonmarking/article/details/47958395 本系列目前共三篇文章,后续还会更新 WebRTC VideoEngine超详细教 ...

随机推荐

  1. C语言程序设计手写笔记

    最近自己录了一个自学C语言系列,笔记发出来,视频还在传

  2. 微信企业付款到零钱(Java版)

    订阅专栏1.开通条件. 商户注册超过90天且,连续30天有交易,可以每天支付1元来刷,目前测试可行.随后在微信商户平台 - 产品管理自动开启,然后需要申请. 疑问: 话说是要有公众号appid才行,但 ...

  3. Vue3响应式编程三剑客:计算属性、方法与侦听器深度实战指南

    在Vue3开发中,计算属性.方法和侦听器是处理数据逻辑的核心工具.它们各自有不同的作用和适用场景,合理使用这些工具可以显著提升代码的可读性和性能.本篇将深入探讨这三者的定义.使用场景以及实际案例,并通 ...

  4. 学习理论:单阶段代理损失的(H, R) - 一致界证明

    1 导引 我们在上一篇博客<学习理论:预测器-拒绝器多分类弃权学习>中介绍了弃权学习的基本概念和方法,其中包括了下列针对多分类问题的单阶段预测器-拒绝器弃权损失\(L_{\text{abs ...

  5. python py文件名称不能和库名称一样,否则报错module 'requests' has no attribute 'post'

    这个问题自己犯过几次,加深一下记忆

  6. php-fpm 启动后没有监听端口9000

    netstat -tpln未发现监听9000端口.查看/var/log/php7-fpm.log一切正常. 随后查看PHP配置文件:/usr/local/php/etc/php-fpm.conf (源 ...

  7. 业余无线电之配置Orbitron My DDE 自动推送多普勒频率至SDRSharp程序中

    配置Orbitron My DDE 推送多普勒频率至SDR (By:BI8EJM) Start Edit Time 2021/8/16 23:03 要实现的功能:通过本次设置,让Orbitron程序自 ...

  8. Linux® 容器

    是与系统其他部分隔离开的一系列进程.运行这些进程所需的所有文件都由另一个镜像提供,这意味着从开发到测试再到生产的整个过程中,Linux 容器都具有可移植性和一致性.因而,相对于依赖重复传统测试环境的开 ...

  9. 3.14 + 1e10 - 1e10 = 0 ? ——浮点数的本质

    3.14 + 1e10 - 1e10 = 0 ? --浮点数的本质 我们先看这样一个例子: #include <iostream> int main(int argc, char **ar ...

  10. Static Timing Analysis Basics

    Preface This note only introduce the essential concepts about Static Timing Analysis, which not cont ...