pywinauto:Windows桌面应用自动化测试(十)
前言
上一篇文章地址:
pywinauto:Windows桌面应用自动化测试(九)-CSDN博客
下一篇文章地址:
暂无
一、查找属性总结
通过查看源码与官方文档,我们发现方法window、child_window、children的参数都依赖于非常低级的 API,即find_elements方法
,因此,我们只要将find_elements的参数与inspect查找到的属性对应起来,就可以根据inspect查找到的属性快速定位元素,如下表所示:
find_elements 参数 | inspect 获取的属性 | 说明 |
---|---|---|
class_name | ClassName | 匹配控件的类名,使用类名精确匹配控件类型。如果 ClassName 是空值,表示没有匹配到类名。 |
class_name_re | ClassName | 使用正则表达式匹配控件的类名。 |
parent | Ancestors , Parent | 控件的父控件,通过 Parent 或 Ancestors 属性来指定父窗口或控件。 |
process | ProcessId | 控件所属的进程 ID,通过 ProcessId 属性匹配。 |
title | Name , LegacyIAccessible.Name | 控件或窗口的标题或文本内容,精确匹配。 |
title_re | Name , LegacyIAccessible.Name | 使用正则表达式匹配控件的标题或文本内容。 |
top_level_only | 是否为顶层窗口 | 是否只查找顶层控件,True 为只查找顶层控件,False 包括嵌套子控件。 |
visible_only | IsOffscreen | 控件的可见性,True 表示只查找可见控件 (IsOffscreen=False )。 |
enabled_only | IsEnabled | 控件的启用状态,True 表示只查找启用的控件。 |
best_match | Name , LegacyIAccessible.Name | 查找名称与指定字符串相似的控件,允许模糊匹配。 |
handle | hwnd | 控件的唯一句柄,通过 hwnd 来精确匹配控件。 |
ctrl_index | GridItem.Row , GridItem.Column | 指定控件在父控件中的索引或网格位置。 |
found_index | 索引 (在界面上查找的顺序) | 在查找到的控件集合中,通过索引获取特定控件。 |
predicate_func | 自定义属性 | 自定义的函数,用于自定义过滤控件。 |
active_only | IsActive (未在此属性中体现) | 只查找当前活动的控件。 |
control_id | ControlId , AutomationId | 控件的唯一 ID,通过 ControlId 或 AutomationId 来唯一匹配控件。 |
control_type | ControlType , LocalizedControlType | 控件的类型,如 Button 、Edit 等。 |
auto_id | AutomationId | 控件的自动化 ID,通过 AutomationId 唯一匹配控件。 |
framework_id | FrameworkId | 控件所属的框架 ID,如 Win32 、Chrome 等。 |
backend | 与自动化后端相关 | 指定使用的自动化后端,如 "win32" 或 "uia" 。 |
depth | 控件层次深度 | 控件的层次深度,用于控制查找的递归层级。 |
在使用 Pywinauto 进行元素定位时,不同属性有不同的简易程度和精确度。以下是对常见属性的优先级排序,基于简易程度、精确度和常见用例进行考虑:
属性 | 优先级 | 简易程度 | 精确度 | 备注 |
---|---|---|---|---|
best_match | 1 | 高 | 高 | 基于控件的最佳匹配,最常用,适合简单界面中的大部分场景,易于理解和使用。 |
handle | 2 | 中 | 最高 | 通过唯一的窗口句柄定位,适合需要唯一标识控件的情况,精确度最高,但不易获取,需要更多的准备工作。 |
control_id | 3 | 中 | 高 | 通过控件的唯一 ID 定位,常用于 Win32 应用中,适合唯一标识的控件,精确度很高,但前提是知道控件的 ID。 |
class_name | 4 | 高 | 中高 | 通过控件类名定位,简易程度高,适合同类型控件较多的情况,如所有按钮都有相同类名。精确度取决于控件的唯一性,适合大范围初步筛选。 |
title /name | 5 | 高 | 高 | 使用控件的文本或标题进行定位,适合大部分窗口标题、按钮等带有文本的控件。对文本敏感,适合标识唯一控件。 |
auto_id | 6 | 低 | 高 | 使用 UIAutomation 自动生成的 ID,适合现代应用程序,但不是所有应用都支持,支持则精确度较高。 |
class_name_re | 7 | 中 | 中高 | 通过正则表达式匹配控件类名,灵活性强,适合需要匹配多个类名的场景。精确度和简易度依赖于正则表达式的复杂程度。 |
title_re | 8 | 中 | 中高 | 通过正则表达式匹配控件的标题或文本,适合标题变化不大但模式一致的场景。适合动态内容,简易度取决于正则表达式。 |
visible_only | 9 | 高 | 中 | 仅搜索可见的控件,通常用于避免查找隐藏控件,简易程度高,但精确度不高,主要用于初步筛选。 |
enabled_only | 10 | 高 | 中 | 仅搜索启用的控件,类似 visible_only ,但用于筛选可操作的控件。通常与其他定位方法结合使用。 |
depth | 11 | 中低 | 中高 | 限定搜索的控件深度,适用于控件层次复杂的 UI 界面,但需要明确层级结构,简易度低,适合高效筛选。 |
parent | 12 | 低 | 中 | 限定控件的父级控件,适合在嵌套复杂的界面中定位元素。简易度低,使用时需要清楚控件的层次结构,适合在多层结构中准确定位。 |
process | 13 | 低 | 中 | 限定属于特定进程的控件,适用于进程内多个窗口的定位,简易度低,通常用于精细化筛选。 |
predicate_func | 14 | 低 | 高 | 用户自定义的筛选函数,灵活性和精确度高,但实现难度大,适合高级用户进行复杂控件筛选。 |