模型对象及属性
模型管理器中的树形结构中的每个节点是一个模型对象,是匹配和操作控件的一个自动化对象,该对象通过自身的标识属性匹配被自动化应用中的目标控件,并通过自身的API————对象操作API来操作目标控件。
因此了解对象识别属性有助于我们弄清楚不同情况下该使用哪种识别属性来达到最佳的匹配效果。
注意,你会在模型管理器中的
控件操作
标签页中看到属性
这个字眼。但实际上这些属性指的是返回控件信息的对象操作API,仅仅是API操作的一种分类,具体的可以查看具体某种技术的API,例如Winodws自动化一节。
识别属性概述
在操作控件时,首选根据对象自身的标识属性去定位应用中的目标控件,然后再在控件上执行相应的操作。因此,不合理的识别属性可能会导致:
- 匹配不到目标控件:提示错误“1001:不能找到这个对象”;
- 匹配到多个目标控件:模型管理器右上角提示找到多个控件,左下角列出所有控件的位置信息;
对于前一种情况,在运行中会导致报错,是必须要解决的;而后一种情况,尽量通过设置合理的识别属性来避免。
识别属性的注意点
侦测器识别添加控件时,自动推荐了一些识别属性。将控件的部分属性作为基本的识别属性,比如:
type
、name
、automationId
等,除了必需的type
识别属性外,生成哪些识别属性取决于目标控件的类型和拥有哪些属性。识别属性根据控件被添加进模型管理器时的状态创建。因此如果控件某些属性是动态生成的,则不应该将它们作为识别属性。比如为了得到计算器的结果,需要识别显示计算结果的
Text
控件,如下图。这时使用它的name
属性就变得十分不可靠,因为通过观察会发现name
属性会随着内容一起更改,因此在添加这个显示面板控件时,要手动将name
属性删除以保证能够匹配到结果所在的控件。识别属性与运行时属性的关系。
- 对象有识别属性,从之前的阅读可以了解就是用于匹配控件,是存储在模型文件中,或代码中定义(描述模式)。此外,为了提高识别能力,模型管理器额外提供了一些辅助识别属性,比如
index
、levelToParent
等。 - 运行时属性是自动化过程中从控件获取的属性值。而根据不同的控件类型,也提供了不同的API获取这些属性。例如
hwnd
返回控件窗口的句柄,x
或y
返回控件的所在位置等。 - 它们两者之间可能有一部分是相同。但运行时属性可能随着时间被应用自身所改变。
- 对象有识别属性,从之前的阅读可以了解就是用于匹配控件,是存储在模型文件中,或代码中定义(描述模式)。此外,为了提高识别能力,模型管理器额外提供了一些辅助识别属性,比如
标识属性和其它属性?
在识别属性
标签页中可以看到属性又被分为标识属性
和其它属性
,标识属性是一组生效的识别属性
,其它属性
只显示而不生效,可以使用添加属性
按钮添加到标识属性
中,或者更快捷的方式是在某个其他属性上点右键,选择“设为识别属性”。
识别属性及分类
在侦测器侦测控件时,会取得控件所有可用的识别属性,并且根据当前控件的属性赋予合适的默认值。在模型管理器中也可以管理控件的的识别属性,还可以手动编辑识别属性的值来更好的匹配控件。
不同类型的控件对象有不同的识别属性,参考每种自动化技术的帮助了解对应的识别属性信息,例如: