当前位置: 首页 > news >正文

pywinauto:Windows桌面应用自动化测试(七)

前言

上一篇文章地址:

pywinauto:Windows桌面应用自动化测试(六)-CSDN博客

下一篇文章地址:

暂无

一、实战常用方法

1、通过Desktop快速获取窗口

通过之前章节我们了解到控制应用的方法为Application,需要连接应用再获取窗口。

from pywinauto.application import Application

现在我们可以通过Desktop直接获取窗口。

from pywinauto import Desktop   def is_logged_in():return Desktop(backend='uia').window(title='Main Page').exists()

两种方法对比如下: 

特性Desktop 方法Application 方法
用途查找和连接所有已打开的窗口启动和控制特定的应用程序
适用场景需要与系统中所有应用程序或窗口进行交互需要启动和控制特定应用程序
性能可能因为需要遍历所有窗口而较慢对于特定应用程序的操作更加高效
灵活性可以与任何已打开的窗口进行交互只能控制当前脚本启动的应用程序
启动应用程序不适用可以启动新的应用程序
控制应用程序生命周期不适用可以启动、关闭和重新启动应用程序
示例代码Desktop(backend='uia').window(title="...")Application(backend='uia').start('...').window(title="...")

2、获取嵌套窗口

假设窗口嵌套了很多层,那么我们该如何获取他呢?一层层获取,还是直接获取?其实,两种方式都可行,对于直接获取,可以采用Desktop方法,也可以获取到应用窗口后,采用children_window方法直接获取。

3、children_window与children的方法对比

(1)child_window方法

child_window方法用于精确查找单个子控件。它不会返回列表,而是返回第一个匹配的控件。如果没有找到匹配的控件,会引发异常。

(3)children方法

children方法用于获取一个窗口的所有直接子控件。这个方法会返回一个包含子控件的列表。它接受多个参数来筛选符合条件的控件。

特性child_window 方法children 方法
用途根据特定属性查找单个子控件获取所有子控件,或根据条件筛选子控件
返回值单个控件对象控件对象的列表
适用场景查找特定的、已知属性的控件需要遍历和操作多个控件
属性过滤可以使用多个属性过滤可以传递条件进行筛选
性能查找单个控件,性能较高获取所有子控件,如果控件较多,性能可能受影响
示例代码main_window.child_window(title="...", control_type="...")main_window.children(control_type="...")

4、inspect使用小技巧

当我们想选中窗口时,可以点击它来显示定位元素看看有没有框,如下图,你觉得你选中了框,但实际上你可能选中了标题。

还有一点就是元素的点击区域,你以为点中了,实际上只是点钟了框的中心,而它的作用域是文字部分。

5、控制应用内嵌的系统文件窗口

假设应用调用了系统文件窗口,需要对两个输入框输入信息,如下展示:

其中1需要输入文件路径,2需要输入文件名。

这种情况就需要使用多种操作来实现该功能,以下是一个简单的代码:

    def get_upgrade_folder_win(self):'''获取升级选择文件的窗口'''# return self.dialog.child_window(auto_id="MainForm.widget_client.viScanner.qt_tabwidget_stackedwidget.FormEquipmentlist.FirmUpgrageBox.widget.widget_path.pushButton_browers")# return Desktop(backend="uia").window(title_re="请选择固件升级文件")return self.dialog.child_window(title="请选择固件升级文件")def choise_upgrade_file(self, file_path):'''选择升级文件,需要传输文件路径:# 定义文件路径file_path = r"C:\Users\Downloads\OTA.gta"'''upgrade_win = self.get_upgrade_folder_win()# 分割路径directory, filename = os.path.split(file_path)print("Directory:", directory)print("Filename:", filename)upgrade_win.print_control_identifiers()way_element = upgrade_win.child_window(title_re=".*地址.*", found_index=0)rectangle = self._element_num_of_copies(way_element, 5 / 6)click(coords=rectangle)upgrade_win.child_window(title_re=".*地址.*", class_name="Edit", found_index=0).type_keys("{BACKSPACE}")upgrade_win.child_window(title_re=".*地址.*", class_name="Edit", found_index=0).set_text(directory)from pywinauto.keyboard import send_keyssend_keys("{ENTER}")upgrade_win.child_window(title="文件名(N):", class_name="Edit").set_text(filename)

这里涉及到一些输入文本的方法,汇总一下:

(1)set_text方法:
直接设置控件的文本内容。
app.window(title='YourWindowTitle').Edit.set_text('YourText')

(2)type_keys方法:
模拟按键输入,可以包括特殊键(如回车键、Tab键等)。
app.window(title='YourWindowTitle').Edit.type_keys('YourText{ENTER}')

(3)send_keys方法:
使用pywinauto.keyboard模块,可以模拟全局键盘输入。
from pywinauto.keyboard import send_keys
send_keys('YourText{ENTER}')

(4)WrapperObject.set_edit_text方法:
用于直接设置编辑控件的文本内容
edit = app.window(title='YourWindowTitle').Edit.wrapper_object()
edit.set_edit_text('YourText')

(5)WrapperObject.send_chars方法:
模拟逐字符输入
edit = app.window(title='YourWindowTitle').Edit.wrapper_object()
edit.send_chars('YourText')

一些特殊字符的输入方式总结如下:

特殊字符描述输入方式 (type_keys)输入方式 (send_keys)
{SPACE}空格键{SPACE}{SPACE}
{BACKSPACE}退格键{BACKSPACE}, {BS}, {BKSP}{BACKSPACE}, {BS}, {BKSP}
{BREAK}Break 键{BREAK}{BREAK}
{CAPSLOCK}大写锁定键{CAPSLOCK}{CAPSLOCK}
{DELETE}删除键{DELETE}, {DEL}{DELETE}, {DEL}
{DOWN}向下箭头键{DOWN}{DOWN}
{END}结束键{END}{END}
{ENTER}回车键{ENTER}, ~{ENTER}, ~
{ESC}Escape 键{ESC}{ESC}
{HELP}帮助键{HELP}{HELP}
{HOME}Home 键{HOME}{HOME}
{INSERT}插入键{INSERT}, {INS}{INSERT}, {INS}
{LEFT}向左箭头键{LEFT}{LEFT}
{NUMLOCK}数字锁定键{NUMLOCK}{NUMLOCK}
{PGDN}向下翻页键{PGDN}{PGDN}
{PGUP}向上翻页键{PGUP}{PGUP}
{PRTSC}打印屏幕键{PRTSC}{PRTSC}
{RIGHT}向右箭头键{RIGHT}{RIGHT}
{SCROLLLOCK}滚动锁定键{SCROLLLOCK}{SCROLLLOCK}
{TAB}Tab 键{TAB}{TAB}
{UP}向上箭头键{UP}{UP}
{ADD}加号键{ADD}{ADD}

相关文章:

pywinauto:Windows桌面应用自动化测试(七)

前言 上一篇文章地址: pywinauto:Windows桌面应用自动化测试(六)-CSDN博客 下一篇文章地址: 暂无 一、实战常用方法 1、通过Desktop快速获取窗口 通过之前章节我们了解到控制应用的方法为Application&#xff0…...

RGB++是什么;UTXO是什么;Nervos网络;CKB区块链;

目录 RGB++是什么,简单举例说明 RGB++简介 举例说明 UTXO是什么 定义 功能与特点 使用方式 优缺点 结论 CKB区块链 一、基础属性 二、技术特点 三、经济模型 四、应用场景 Nervos网络 一、网络架构 二、技术特点 三、经济模型 四、应用场景 五、未来展望 …...

轻闪PDF v2.14.9 解锁版下载与安装教程 (全能PDF转换器)

前言 轻闪PDF(原傲软PDF编辑软件)是一款操作简单的全能PDF转换器,轻松实现PDF转换为Word,Excel或其他格式,以及PDF压缩,合并和图片文字识别OCR等功能.这款pdf编辑转换软件几乎支持所有常见文档格式,一键完成PDF与其他文档互相转换,并含有PDF合并,压缩,图片文字识别OCR等增值功…...

mysql 5.7 解析binlog日志,并统计每个类型语句(insert、update、delete)、每个表的执行次数

1、mysqlbinlog工具 使用mysqlbinlog工具将文件中执行语句解析至某个文件中。 /usr/local/mnt/mysql/bin/mysqlbinlog --base64-outputDECODE-ROWS -v /usr/local/mnt/mysql/log/mysql-bin.017278 > binlog017278.sql --base64-outputDECODE-ROWS 参数: 这个…...

MySQL案例:MHA实现主备切换(主从架构)万字详解

目录 MHA 概念 MHA的组成 特点 案例介绍 (1)案例需求 (2)案例实现思路 (3)案例拓扑图 (4)案例环境 案例步骤 基本环境配置 关闭防火墙和内核安全机制 安装数据库 授权…...

81.SAP ME - SAP SMGW Getway Monitor

目录 1.起因 2.SMGW Displaying Logged On Clients Displaying Remote Gateways Display and Control Existing Connections Deleting a Connection Displaying Gateway Release Information Displaying Parameters and Attributes of the Gateway Change Gateway Pa…...

SAPUI5基础知识24 - 如何向manifest.json中添加模型(小结)

1. 背景 在上一篇博客中,我们总结了SAPUI5中模型的各种类型,并通过代码给出了实例化这些模型的方式。 其实,在SAPUI5中,我们可以通过在manifest.json 中添加模型配置,简化模型的初始化过程,并确保模型在应…...

操作系统---文件管理

一、系统调用(系统API) 什么是系统调用 由操作系统向应用程序提供的程序接口信息,本质上就是应用程序与操作系统之间交互的接口。 操作系统的主要功能是为了管理硬件资源和为应用软件的开发人员提供一个良好的环境,使得应用程序…...

C语言指针详解(三)目录版

C语言指针详解(三)目录版 1、字符指针变量1.1、字符指针变量的一般应用1.2、常量字符串1.3、常量字符串与普通字符串的区别1.3.1 常量字符串的不可修改性1.3.2 常量字符串的存储 2、数组指针变量2.1、数组指针变量定义2.2、数组指针变量的初始化 3、二维…...

【AI资讯早报】AI科技前沿资讯概览:2024年8月6日早报

【AI资讯早报,感知未来】AI科技前沿资讯概览,涵盖了行业大会、技术创新、应用场景、行业动态等多个方面,全面展现了AI领域的最新发展动态和未来趋势。 1.【图像生成技术再突破】Midjourney V6.1震撼发布,人像生成质量跃上新台阶 …...

等保测评中的密码技术与密钥管理

在信息安全领域,等保测评(信息安全等级保护测评)是一项重要的安全评估活动,旨在评估信息系统的安全性,并根据评估结果给予相应的安全等级。这一过程中,密码技术与密钥管理发挥着至关重要的作用。本文将详细…...

go语言flag库学习

文章目录 flag基本创建使用方法正常声明全局变量指针短写 flag 基本创建使用方法 func String(name string, value string, usage string) *string func StringVar(p *string, name string, value string, usage string) 正常声明全局变量 package mainimport ("flag…...

2024年必备技能:智联招聘岗位信息采集技巧全解析

随着大数据时代的发展,精准定位职业机会成为程序员求职的关键。本文将深入解析如何利用Python高效采集智联招聘上的岗位信息,助你在2024年的职场竞争中脱颖而出。通过实战代码示例,揭示网络爬虫背后的秘密,让你轻松掌握这一必备技…...

《机器学习by周志华》学习笔记-决策树-02

1、剪枝处理(Pruning) 1.1、背景概念 上文「决策树01」的学习中,我们了解了著名的3种决策树算法ID3、C4.5、CART。这3种决策树算法最根本的核心就是根据特征选择离散属性作为节点来搭建树结构,运用搭好的结构进行推理。 剪枝(pruning)则就是将搭好的决策树去掉一些「非叶节…...

centos Python3.6升级3.8

CentOS系统上升级Python3.6到3.8版本。 步骤 1. 更新系统 在开始升级Python之前,首先需要确保系统是最新的。可以使用以下命令更新CentOS系统: sudo yum update 2. 安装依赖项 升级Python之前,需要安装一些依赖项。运行以下命令安装这些依赖…...

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于竞价空间预测的虚拟电厂日前竞价策略》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…...

Simulink模型开发中的一些自动化方法

随着Simulink模型的产品化开发进程,许多模型开发人员会关心模型的建模自动化问题。比如如何对模型中的元素进行批量查找和修改;如何构建自己的建模规则对模型进行检查;如何实现测试自动化等。在这些使用场景中我们都需要了解一些Simulink函数…...

RabbitMQ消费者消费消息失败处理

在我们开发分布式系统的过程中,RabbitMQ这样的消息队列无疑是实现微服务间通信的利器。然而,消息处理失败在所难免。当我们面临消费消息失败的情况时,该如何应对呢?在这篇博客中,我将带你深入探讨RabbitMQ消费者的消息…...

Apache Kylin分布式的分析数据仓库

Apache Kylin 是一个分布式的分析数据仓库,用于大数据上的超快在线分析处理 (OLAP)。它能够在大规模数据集上提供亚秒级的查询响应时间,并支持标准的 ANSI SQL 查询接口。Kylin 最初由 eBay 开发,后来捐赠给 Apache 软件基金会,现…...

informer中DeltaFIFO机制的实现分析与源码解读

informer中的DeltaFIFO机制的实现分析与源码解读 DeltaFIFO作为informer中重要组件,本文从源码层面了解是如何DelatFIFO是实现的。 DeltaFIFO的定义 找到delta_fifo.go的源码,位于client-go/tools/cache/delta_fifo.go 代码结构大致如下: store定义…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...

命令行关闭Windows防火墙

命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)​方法二:CMD命令…...

【Java多线程从青铜到王者】单例设计模式(八)

wait和sleep的区别 我们的wait也是提供了一个还有超时时间的版本,sleep也是可以指定时间的,也就是说时间一到就会解除阻塞,继续执行 wait和sleep都能被提前唤醒(虽然时间还没有到也可以提前唤醒),wait能被notify提前唤醒&#xf…...

数据库管理与高可用-MySQL故障排查与生产环境优化

目录 #1.1MySQL单案例故障排查 1.1.1MySQL常见的故障排查 1.1.2MySQL主从故障排查 #2.1MySQL优化 2.1.1硬件方面的优化 2.1.2进程方面的优化 #3.1MySQL存储引擎 3.1.1 MyISAM存储引擎 3.1.2 InnoDB存储引擎 1.1MySQL单案例故障排查 1.1.1MySQL常见的故障排查 (1&…...

智能照明系统:具备认知能力的“光神经网络”

智能照明系统是物联网技术与传统照明深度融合的产物,其本质是通过感知环境、解析需求、自主决策的闭环控制,重构光与人、空间、环境的关系。这一系统由智能光源、多维传感器、边缘计算单元及云端管理平台构成,形成具备认知能力的“光神经网络…...

【大厂机试题+算法可视化】最长的指定瑕疵度的元音子串

题目 开头和结尾都是元音字母(aeiouAEIOU)的字符串为元音字符串,其中混杂的非元音字母数量为其瑕疵度。比如: “a” 、 “aa”是元音字符串,其瑕疵度都为0 “aiur”不是元音字符串(结尾不是元音字符) “…...

CCF 开源发展委员会 “开源高校行“ 暨红山开源 + OpenAtom openKylin 高校行活动在西安四所高校成功举办

点击蓝字 关注我们 CCF Opensource Development Committee CCF开源高校行 暨红山开源 openKylin 高校行 西安站 5 月 26 日至 28 日,CCF 开源发展委员会 "开源高校行" 暨红山开源 OpenAtom openKylin 高校行活动在西安四所高校(西安交通大学…...