智能识别 QTP/UFT 与例子

什么是智能识别? QTP/UFT?
智能识别 是一种备用对象识别机制 OpenText UFT 第一,以前称为 HP QuickTest Professional 的工具(QTP如果正常的识别过程无法找到与物体学习到的描述完全匹配的对象, UFT 如果对象类别的对象识别设置中启用了智能识别机制,则会触发智能识别。
与学习到的描述不同,智能识别并不要求每个存储的属性都完全匹配。它会评估两类属性,从而将候选对象范围缩小到唯一一个:
- 基本过滤器属性。 测试对象类的最基本属性;这些属性的值不能改变,否则就会改变原始对象的本质。
- 可选的筛选属性。 有助于识别物体的辅助属性,但这些属性更有可能随时间而改变。
智能识别运行时, UFT 它会“忘记”已学习到的描述,并重建一个新的候选列表,其中包含所有符合基本筛选属性的对象。然后,它会逐一检查可选筛选属性,进一步缩小列表范围,直到只剩下一个对象。
如果在运行会话期间调用智能识别,测试结果树会记录一条警告消息,确认已使用该机制,并在结果中插入一个智能识别步骤,以便与学习到的描述的偏差保持可见。
智能识别技术排名第三 UFT在学习到的描述和任何视觉关系标识符之后,以及作为最后手段使用的序号标识符之前,对象识别层级结构中存在一个标识符。了解它的位置可以解释为什么对于经常运行的脚本来说,直接禁用它而不是修复底层属性,很少是最佳的长期选择。
基本筛选属性与可选筛选属性
这两个过滤器协同工作,但在上述消除过程中扮演着不同的角色。下面的比较阐明了何时使用每个过滤器以及它们各自所承担的消除能力。
| 方面 | 基本筛选属性 | 可选的过滤器属性 |
|---|---|---|
| 职位 | 建立初始候选人名单 | 将候选对象列表缩小到单个对象 |
| 稳定性 | 几乎从不在不改变对象身份的情况下进行更改。 | 可以周期性地改变,而不会改变对象的本质。 |
| 匹配规则 | 所有候选人都必须符合所有基本属性 | 逐一检查属性;如果某个属性会排除所有候选属性,则跳过该属性。 |
| 典型示例 | HTML标签、对象类、索引 | 名称、HTML ID、替代文本、图像来源 |
| 已配置 | 对象识别 > 配置 > 基本筛选属性 | 对象识别 > 配置 > 可选筛选属性 |
由于同一属性不能同时出现在两个列表中,因此需要仔细规划拆分方式。定义对象基本本质的属性应该放在基础列表中;而仅仅用于区分对象与其他类似对象的属性则应该放在可选列表中。
智能识别的工作原理:分步流程
智能识别功能仅在学习到的描述以及任何视觉关系识别器都无法精确定位单个对象后才会激活。一旦触发, UFT 其工作原理是通过可预测的四步排除法实现的:
- 重建候选人名单。 UFT 忽略学习到的描述,并扫描对象的父对象,查找与所有基本筛选属性匹配的每个对象。
- 应用第一个可选属性。 UFT 删除任何与“可选筛选属性”列表中的第一个属性不匹配的候选对象。
- 评估结果。 如果还有不止一位候选人, UFT 使用下一个可选属性重复上一步。如果筛选条件会排除所有剩余候选属性, UFT 跳过该属性,直接处理下一个属性。
- 只打一场就够了。 UFT 重复筛选和评估循环,直到只剩下一个对象,或者直到没有可选属性可以检查为止。
如果排除法仍然无法找出单个对象, UFT 如果仍然无法识别对象,则回退到已学习的描述加上序号标识符,例如索引、位置或创建时间。如果即使这种组合也无法识别对象,则运行会话暂停并显示运行时错误。
如何启用或禁用智能识别
智能识别是根据每个测试对象类别进行配置的。 工具 > 物体识别选择环境和对象类,然后打开 启用智能识别,然后点击 配置 选择该类的基本筛选属性和可选筛选属性。您也可以通过同一个对话框关闭某个类的此选项,使其始终使用已学习到的描述。
智能识别的工作原理(视频演示)
下面的视频通过一个实际示例演示了基本滤波器和可选滤波器的消除过程。
点击 开始 如果视频无法访问
智能识别技术的优势和劣势
智能识别增强了系统的弹性,但这种弹性会带来一定的运行时开销。在默认启用整个对象库的智能识别功能之前,务必权衡利弊。
- ✅ 能够应对细微的界面改动: 重命名属性或改变页面中的位置不再会导致所有接触该对象的脚本都失效。
- ✅ 减少对象库维护工作: 测试人员在前端小版本发布后,重新录制对象所花费的时间会减少。
- ✅ 在搜索结果中保持可见: 每次调用都会记录警告,以便团队可以审核实际需要回退机制的频率。
- ⚠️ 测试执行速度较慢: 构建和筛选候选名单所需的时间明显比直接匹配房产要长,而且对于大型套房来说,成本会成倍增加。
- ⚠️ 可能掩盖真正的缺陷: 如果智能识别功能悄悄地发现了一个相似的物体,那么真正的用户界面退化可能不会被注意到。
- ⚠️ 需要定期审查: 随着应用程序的不断发展,基本筛选属性和可选筛选属性仍然需要不时进行审查。
大多数团队会为探索性脚本和低频脚本启用智能识别功能,然后在对象的识别属性稳定后,有选择地对性能关键型对象禁用该功能。
修改对象属性以避免智能识别
智能识别的灵活性是以上述运行时开销为代价的,因此许多团队更倾向于自行修复对象识别属性,而不是反复依赖回退机制。注意以下两个信号,它们表明修复属性比运行时回退更有效:几乎每次运行时都会出现智能识别警告,以及自回退机制触发以来脚本运行速度明显变慢。这两个信号都指向一个对象的默认识别属性不再适用于应用程序,而不是一次性的 UI 故障。下面的视频演示了如何在真实的登录表单上进行修复。
点击 开始 如果视频无法访问
视频文字稿:要点总结
- 智能识别会减慢脚本执行速度,这对于大型或频繁运行的测试套件来说是不可取的。
- 为了完全避免这种情况,请更改默认对象标识属性,而不是依赖回退机制。
- In 对象识别从必需属性中删除“name”,并将其替换为“HTML id”,以使测试与名称更改无关。
- 强制性财产清单更新后,重新记录相同的步骤。
- 如果名称后来从“提交”更改为“登录”,则脚本现在会在不触发智能识别的情况下运行。
- 同样地,如果被测对象上的任何强制性或辅助性属性频繁更改,则将其替换为更稳定的属性,以保持脚本执行速度快。
- 房产调整是一项需要经验积累的技能;你使用工具的次数越多,这项技能就会提高。
使用 VBScript 禁用智能识别
也可以在整个运行会话期间关闭智能识别功能,而无需修改对象库,方法是: 禁用使用算法的回放 运行时设置。当脚本在任何属性不匹配时应立即失败,而不是静默地回退到排除过程时,此功能非常有用。
' Disable Smart Identification for this run session Setting("DisableReplayUsingAlgorithm") = 1 Browser("Mercury Tours").Page("Find Flights").WebEdit("userName").Set "mercury" ' Re-enable Smart Identification once the strict steps are done Setting("DisableReplayUsingAlgorithm") = 0
尽量缩短禁用窗口的时间。在该窗口内运行的步骤必须与其学习到的描述完全匹配,因此被测应用程序中任何合理的偏差都会导致立即失败,而不是优雅地回退。
相关资源

