侦测规则
在使用 CukeTest 进行操作录制和控件侦测时,工具会自动为控件对象选择合适的标识属性和名称。
然而,对于某些复杂或动态变化的应用,默认规则可能无法完全满足需求。在这些情况下,您就需要手动调整标识属性和对象名称。这项工作可能会耗时费力——这时候侦测规则功能就派上用场了。它能够帮助您自动保存并使用最合适的控件属性,从而简化这个过程。
如何使用
CukeTest 会在录制和侦测过程中自动应用已保存的规则。如果找到与当前控件相匹配的规则,CukeTest 会根据该规则的设定,而不是默认设置,来保存该控件的信息。如果同一个控件同时匹配多个规则,系统会同时应用这些规则,确保最佳的控件识别效果。
需要注意的是,侦测规则是全局适用的,也就是说它们会影响您打开的所有CukeTest实例,而不仅限于当前项目。
编辑规则
默认情况下,CukeTest 并没有预设侦测规则,您可以根据需要手动创建规则。要开始编辑规则,请按以下步骤操作:
- 打开 CukeTest 中的模型管理器。
- 点击工具栏上的 管理侦测(录制)规则 按钮。
- 在弹出的对话框中,您可以双击已保存的规则进行编辑,或点击 添加规则 创建新规则。
在规则编辑窗口中,您可以设置规则的名称、条件、操作等属性。
规则详细设置
规则名称
- 输入框中为当前规则命名,比如“WinForm 控件识别规则”。
条件设置(如果):
- 属性:选择要检测的对象属性,常见的属性包括:
className
、automationId
、name
、text
- 条件:
exists
:检查目标属性是否存在,通常用于确保控件具备该属性,默认值为true
。matches
:通过正则表达式匹配属性值,适用于属性值会动态变化的情况。equals
:完全匹配属性值。
- 值:
- 如果条件是
exists
,不需要填写值,默认即为true
。 - 如果条件是
matches
,需填写匹配的正则表达式。 - 如果条件是
equals
,则需提供明确的文本值。
- 如果条件是
- 属性:选择要检测的对象属性,常见的属性包括:
操作设置(那么): 根据条件设置定义要执行的操作:
excludeNode
:从控件树中排除此控件。excludeProperty
:从标识属性中排除指定属性。includeNode
:强制保留该控件,即使它默认会被忽略。includeProperty
:将某个属性标记为控件的标识属性。nameAfter
:使用指定属性的值为控件命名。
禁用此规则:如需暂时停用某条规则,您可以点击 禁用此规则 按钮。
确认设置无误后,点击保存按钮以保存规则。
导入和导出
您可以将创建的规则导出为 JSON 文件,并将其分享给其他人使用。也可以从 JSON 文件中导入规则到 CukeTest 中,确保不同测试环境中规则的统一性。
实际应用场景
在某些桌面应用中,控件的类名className
属性可能会动态变化,比如在WinForm应用中,ToolBar
控件的类名(如WindowsForms10.Window.8.app
)后半部分常常是动态生成的,可能出现以下几种类名变化:
WindowsForms10.Window.8.app.0.3c82b81_r3_ad1
WindowsForms10.Window.8.app.0.2df5871_r3_ad1
这种动态变化会影响自动化脚本中的控件识别,导致测试不稳定。并且,当缺少name和text属性时,工具还会默认使用className
作为控件的名称。而当大量控件的名称类似时,可能会使模型对象和测试脚本变得难以管理和维护。为了解决这些问题,您可以使用侦测规则,精确定义控件对象的保存信息。
示例:处理 WinForm 动态类名
假设在 WinForm 应用中,控件的 className
属性会动态变化,您可以定义如下规则:
- 如果:
- 属性:
className
- 条件:
matches
- 值:
^WindowsForms10
- 属性:
- 那么:
- 操作:
excludeProperty
- 值:
className
- 操作:
nameAfter
- 值:
automationId
- 操作:
这个规则会识别所有以 WindowsForms10
开头的类名,避免将 className
作为控件的名称,而是优先使用 automationId
来命名控件,并将 className
排除在标识属性之外。这种设置可以提升脚本的可靠性,同时增强控件名称的可读性。