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

news2024/9/22 0:50:47

前言

上一篇文章地址:

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

下一篇文章地址:

暂无

一、查找属性总结

通过查看源码与官方文档,我们发现方法window、child_window、children的参数都依赖于非常低级的 API,即find_elements方法,因此,我们只要将find_elements的参数与inspect查找到的属性对应起来,就可以根据inspect查找到的属性快速定位元素,如下表所示:

find_elements 参数inspect 获取的属性说明
class_nameClassName匹配控件的类名,使用类名精确匹配控件类型。如果 ClassName 是空值,表示没有匹配到类名。
class_name_reClassName使用正则表达式匹配控件的类名。
parentAncestors, Parent控件的父控件,通过 ParentAncestors 属性来指定父窗口或控件。
processProcessId控件所属的进程 ID,通过 ProcessId 属性匹配。
titleName, LegacyIAccessible.Name控件或窗口的标题或文本内容,精确匹配。
title_reName, LegacyIAccessible.Name使用正则表达式匹配控件的标题或文本内容。
top_level_only是否为顶层窗口是否只查找顶层控件,True 为只查找顶层控件,False 包括嵌套子控件。
visible_onlyIsOffscreen控件的可见性,True 表示只查找可见控件 (IsOffscreen=False)。
enabled_onlyIsEnabled控件的启用状态,True 表示只查找启用的控件。
best_matchName, LegacyIAccessible.Name查找名称与指定字符串相似的控件,允许模糊匹配。
handlehwnd控件的唯一句柄,通过 hwnd 来精确匹配控件。
ctrl_indexGridItem.Row, GridItem.Column指定控件在父控件中的索引或网格位置。
found_index索引 (在界面上查找的顺序)在查找到的控件集合中,通过索引获取特定控件。
predicate_func自定义属性自定义的函数,用于自定义过滤控件。
active_onlyIsActive (未在此属性中体现)只查找当前活动的控件。
control_idControlId, AutomationId控件的唯一 ID,通过 ControlIdAutomationId 来唯一匹配控件。
control_typeControlType, LocalizedControlType控件的类型,如 ButtonEdit 等。
auto_idAutomationId控件的自动化 ID,通过 AutomationId 唯一匹配控件。
framework_idFrameworkId控件所属的框架 ID,如 Win32Chrome 等。
backend与自动化后端相关指定使用的自动化后端,如 "win32""uia"
depth控件层次深度控件的层次深度,用于控制查找的递归层级。

在使用 Pywinauto 进行元素定位时,不同属性有不同的简易程度和精确度。以下是对常见属性的优先级排序,基于简易程度、精确度和常见用例进行考虑:

属性优先级简易程度精确度备注
best_match1基于控件的最佳匹配,最常用,适合简单界面中的大部分场景,易于理解和使用。
handle2最高通过唯一的窗口句柄定位,适合需要唯一标识控件的情况,精确度最高,但不易获取,需要更多的准备工作。
control_id3通过控件的唯一 ID 定位,常用于 Win32 应用中,适合唯一标识的控件,精确度很高,但前提是知道控件的 ID。
class_name4中高通过控件类名定位,简易程度高,适合同类型控件较多的情况,如所有按钮都有相同类名。精确度取决于控件的唯一性,适合大范围初步筛选。
title/name5使用控件的文本或标题进行定位,适合大部分窗口标题、按钮等带有文本的控件。对文本敏感,适合标识唯一控件。
auto_id6使用 UIAutomation 自动生成的 ID,适合现代应用程序,但不是所有应用都支持,支持则精确度较高。
class_name_re7中高通过正则表达式匹配控件类名,灵活性强,适合需要匹配多个类名的场景。精确度和简易度依赖于正则表达式的复杂程度。
title_re8中高通过正则表达式匹配控件的标题或文本,适合标题变化不大但模式一致的场景。适合动态内容,简易度取决于正则表达式。
visible_only9仅搜索可见的控件,通常用于避免查找隐藏控件,简易程度高,但精确度不高,主要用于初步筛选。
enabled_only10仅搜索启用的控件,类似 visible_only,但用于筛选可操作的控件。通常与其他定位方法结合使用。
depth11中低中高限定搜索的控件深度,适用于控件层次复杂的 UI 界面,但需要明确层级结构,简易度低,适合高效筛选。
parent12限定控件的父级控件,适合在嵌套复杂的界面中定位元素。简易度低,使用时需要清楚控件的层次结构,适合在多层结构中准确定位。
process13限定属于特定进程的控件,适用于进程内多个窗口的定位,简易度低,通常用于精细化筛选。
predicate_func14用户自定义的筛选函数,灵活性和精确度高,但实现难度大,适合高级用户进行复杂控件筛选。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2153765.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

暴力枚举算法

《啊哈&#xff01;算法》学习笔记 本博客的题目仅用暴力枚举&#xff0c;并不一定是最好的解法&#xff0c;主要是了解枚举算法 例题一&#xff1a;两方框奥数 在两个方框内填入相同的数字使得等式成立&#xff1a; 代码如下&#xff1a; for(i1;i<9;i) {if((i*103)*652…

华为OD机试 - 水仙花数Ⅱ - 动态规划(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

【亿美软通-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

探索《藏汉翻译通》小程序:跨平台的藏文翻译利器

亲爱的读者们&#xff0c;当谈及藏文与汉语之间的翻译工具时&#xff0c;您可能已经对安卓平台的《藏汉翻译通》应用和iOS平台的《藏语翻译通》应用有所耳闻。今天&#xff0c;我们想要向您推荐一款既实用又便捷的新工具——《藏汉翻译通》小程序。 这款小程序不仅能够提供精确…

中国电子学会202312青少年软件编程(Python)等级考试试卷(三级)真题

2023年12月青少年软件编程Python等级考试(三级)真题试卷 题目总数:38 总分数:100 一、选择题 第 1 题 单选题 一个非零的二进制正整数,在其末尾添加两个“0”,则该新数将是原数的?( ) A.10倍 B.2倍 C.4倍 D.8倍 第 2 题 单选题 2023年亚运会将在杭…

使用开源 Whisper 视频转文字

Whisper 是 OpenAI 开源的语音到文字的模型&#xff0c; 支持多语言&#xff0c;Whisper 模型是基于 Transformer 架构&#xff0c;音频输入、文字输出&#xff0c;具体架构如下图。 Whisper 支持多种参数&#xff0c;模型的文档中说中等尺寸的模型不支持多语言&#xff0c;我测…

LED显示屏迎来革新:GOB封装技术引领行业新风尚

在我们日常生活中&#xff0c;LED显示屏无处不在&#xff0c;从繁华的街头广告牌到家庭娱乐中心的大屏幕电视&#xff0c;它们都以鲜明的色彩和清晰的画质吸引着我们的目光。然而&#xff0c;在LED显示屏技术日新月异的今天&#xff0c;一种名为GOB&#xff08;Glue On Board&a…

asp.net门诊管理系统网站(含协同过滤算法)VS开发sqlserver数据库web结构c#编程web网页设计

一、源码特点 asp.net门诊管理系统网站是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言 开发。 应用技术&#xff1a;asp.net c…

PAT甲级-1086 Tree Traversals Again

题目 题目大意 题目给出二叉树的节点个数&#xff0c;并给出用栈遍历树的过程。要求输出树的后序遍历&#xff0c;不能有多余空格。 思路 可以看出&#xff0c;栈遍历输出的是树的中序遍历&#xff0c;而依次push进栈的是先序遍历的顺序。题目要求后序&#xff0c;即已知先序…

为什么 ECB 模式不安全

我们先来简单了解下 ECB 模式是如何工作的 ECB 模式不涉及链接模式&#xff0c;所以也就用不着初始化向量&#xff0c;那么相同的明文分组就会被加密成相同的密文分组&#xff0c;而且每个分组运算都是独立的&#xff0c;这也就意味着可以并行提高运算效率&#xff0c;但也正是…

车载软件调试工具系列---Trace32断点功能

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

图形化编程012(变量-倒计时)

案例展示 点击绿旗&#xff0c;使用空格键控制鳐鱼&#xff0c;按下空格向上游&#xff0c;松开下落。 在舞台右侧会出现障碍物从右向左移动&#xff0c;移动到左侧边缘发出声音并隐藏。 鳐鱼碰到障碍停止全部脚本&#xff0c;坚持60秒程序结束。 一、逻辑思维 通过读题将大…

谷歌 Chrome 最新版升级:更强的安全检查功能守护你的上网安全

谷歌 Chrome 浏览器产品经理 Andrew Kamau 在最新发布的博文中宣布&#xff0c;Chrome 浏览器迎来了新一轮的安全升级。新版 Chrome 在后台自动运行安全检查功能&#xff0c;采取了额外的主动措施来保障用户的安全。 自动撤销通知权限 新版 Chrome 浏览器采用了一项基于谷歌安…

线程知识点补充

我们之前&#xff1a; 主线程下来&#xff0c;调用了一个方法run方法&#xff0c;方法执行完后再继续往下走主线程。 咱们期望&#xff1a; 两个同时执行&#xff0c;交替执行。 一些核心概念说明&#xff1a; 一个程序写好是静态的&#xff0c;给他运行起来就是一个进程了…

Linux(7)--目录文件的创建、删除、移动、复制、重命名

文章目录 1. 创建目录、文件2. 删除目录、文件3. 移动目录、文件4. 复制目录、文件5. 重命名目录、文件 1. 创建目录、文件 使用mkdir创建目录&#xff1a; 使用touch创建文件&#xff1a; 2. 删除目录、文件 使用rm可以删除文件: 使用rm -f可以强制删除文件&#xff0c;…

Nuxt Kit 中的插件:创建与使用

title: Nuxt Kit 中的插件:创建与使用 date: 2024/9/19 updated: 2024/9/19 author: cmdragon excerpt: 摘要:本文介绍了在 Nuxt 3 框架中使用 Nuxt Kit 创建和管理插件的方法,包括使用addPlugin注册插件、创建插件文件、在Vue组件中使用插件,以及使用addPluginTemplate…

Java笔试面试题AI答之设计模式(1)

文章目录 1. 简述什么是设计模式 &#xff1f;2. 叙述常见Java设计模式分类 &#xff1f;3. Java 设计模式的六大原则 &#xff1f;4. 简述对 MVC 的理解&#xff0c; MVC 有什么优缺点&#xff1f;MVC 的三个核心部分&#xff1a;MVC 的优点&#xff1a;MVC 的缺点&#xff1a…

AIGC专栏15——CogVideoX-Fun详解 支持图文生视频 拓展CogVideoX到256~1024任意分辨率生成

AIGC专栏15——CogVideoX-Fun详解 支持图&文生视频 拓展CogVideoX到256&#xff5e;1024任意分辨率生成 学习前言项目特点生成效果相关地址汇总源码下载地址 CogVideoX-Fun详解技术储备Diffusion Transformer (DiT)Stable Diffusion 3EasyAnimate-I2V 算法细节算法组成InPa…

调节 PWM的占空比控制舵机的角度

一、PWM工作原理 让计数器从0数到自动重装载值&#xff0c;不停计数。计数值小于输出比较寄存器时输出一种电平&#xff0c;大于输出比较寄存器时使出另一种电平。 修改定时器时钟源的速度以及预分频器等设置&#xff0c;可以修改计数器计数的速度 再加上修改自动重装载值&…

Spring:统一结果私有属性造成的前端无法访问异常报错问题

用户未填写任何评价 1.问题复现 &#xff08;1&#xff09;看一段代码 controller&#xff1a; import lombok.extern.slf4j.Slf4j; import org.ljy.testdemo.common.Result; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.w…