对象属性
在模型管理器中,每个节点都代表一个模型对象,用于匹配和操作自动化应用中的控件。每个对象通过其标识属性与目标控件进行匹配,并通过API执行操作。理解这些标识属性的作用,能够帮助你在不同场景下选择最佳匹配方式,确保识别的准确性和操作的稳定性。
每个控件对象都包含几个关键要素:描述性名称、在应用程序树中的位置、标识属性和其他属性、以及可选的图像。

描述性名称
在模型管理器中,每个控件对象都有一个描述性名称(即模型树节点中显示的名称,如 button、text1)。描述性名称主要用作脚本中获取对象的变量名(如 model.getButton("按钮名称")),目的是提高代码的可读性,但它不参与实际的界面控件定位与识别。
描述性名称与标识属性有着本质的区别:
- 描述性名称(仅用于脚本调用):它主要作为代码中获取该对象的变量名,目的是提高代码的可读性。描述性名称不参与实际的界面控件定位与识别。
- 标识属性(用于控件匹配):标识属性是真正用于定位和匹配目标控件的属性,是自动化识别的核心依据。
- 命名规则与重名递增:CukeTest 默认会使用识别到的某个属性作为描述性名称。如果在同一层级或同一个模型文件中出现重名,CukeTest 会自动在名称后递增数字作为后缀(如
button、button1),这仅仅是为了在模型内解决调用变量名冲突的问题,并不是界面真实的属性。 - 修改命名规则:默认的描述性名称直接取自识别到的某个控件属性,该属性在某些应用中可能缺乏业务含义,导致可读性不佳。如果希望生成的名称更具可读性,可以通过侦测规则中的
nameAfter选项,指定一个更有业务含义的属性(例如automationId)来作为名称。
Tip
描述性名称可以随时修改,不会影响控件的识别和定位。但修改后需要同步更新脚本中引用该名称的代码,否则脚本将无法正确获取对应控件。
标识属性
标识属性是定位目标控件的关键。当我们需要对某个控件进行操作时,首先通过这些标识属性来找到该控件,之后再执行相关操作。如果标识属性设置不当,可能会遇到以下问题:
- 无法匹配到控件:提示错误
1001:对象不存在。 - 匹配到多个控件:如果匹配到多个控件,系统会返回一个控件数组,默认情况下操作第一个控件,但这可能导致错误操作。
为避免这些问题,应该通过添加或优化标识属性来提高控件匹配的准确度。
如何添加和删除标识属性?
- 添加标识属性
:可通过添加额外的识别属性来提高匹配准确性。 若要将“其它属性”中的某个属性设为标识属性,可在该属性上右击并选择“设为标识属性”。
- 删除标识属性
:将标识属性移出,不再用于匹配控件。
更新控件的标识属性
如果控件的属性在应用中发生了变化,可以使用 “从应用更新属性” 功能来同步最新的属性信息,而不需要手动修改测试脚本。点击 按钮后,进入侦测模式,选取需要更新的控件,从而更新当前对象的标识属性。
编辑标识属性
标识属性的值可以直接编辑和修改,只需点击对应属性值的文本进行调整。
修改匹配模式
有些控件的属性(例如 name 或 text)可能会动态变化,为了提高识别的灵活性,可以修改匹配模式。常见的匹配模式包括:
i 包含:属性值包含指定文本。s 起始:属性值以指定文本开头。e 结尾:属性值以指定文本结尾。~ 正则:使用正则表达式匹配属性值。文本:直接匹配完整文本。

标识属性的最佳实践
默认属性推荐:通常,在保存控件对象时,CukeTest 会尝试选择能够唯一标识应用程序中的对象的属性,比如
type、name、automationId等。但是,在某些情况下,您可能希望向标识属性添加额外的属性或删除不必要的属性。例如,您还可以更改属性值以匹配测试应用程序中的更改。动态属性的注意事项:如果控件的某些属性是动态生成的,如显示文本、标签等,避免将这些属性作为识别依据。例如下图中,识别一个计算器的结果时,不应使用
name属性,因为它会随着计算结果的变化而变化。相反,应手动删除动态属性,或根据变化规律修改匹配模式,确保能够匹配到正确的控件。
对于复杂或动态变化的应用,可以使用侦测规则来进一步优化控件识别。

区分标识属性和其它属性
在模型管理器中,对象属性被分为标识属性和其他属性。标识属性用于唯一标识应用程序中的控件,而其他属性只用于记录,并不参与控件匹配。如果需要,也可以通过“设为识别属性”将其他属性升级为标识属性,帮助提高匹配精度。
标识属性 vs 运行时属性
标识属性:用于匹配控件的属性,是固定的,保存在模型文件中,或通过代码描述。为了提高识别效果,还可以使用辅助属性如
index、searchHint等。运行时属性:在自动化过程中动态获取的控件属性值,如控件的可见状态、位置坐标等。这些属性通常用于验证或操作控件的当前状态。虽然大多数标识属性在运行时也是可用的,但运行时属性更侧重于控件的实时状态,通常用于验证控件当前状态。
不同自动化技术的识别属性
不同类型的控件对象会有不同的识别属性,具体信息可以参考各个技术的帮助文档: