QTP:为什么总是调用智能识别?

时间:2012-05-14 15:20:26

标签: qtp

显然,我是QTP的新手。我用它来测试一个有几种形式的HTML页面;一个接着一个接一个。

过去工作正常。现在我经常看到这个:

调用了智能识别机制 - 找不到对象。

为什么会这样?我所要做的就是将焦点设置为文本输入并输入一些数据并单击“提交”。

任何有用的提示都会很棒。 QTP有如此陡峭的学习曲线。

谢谢!

让我更具体一点:这个HTML页面上有40个表单,其中几个使用具有相同name属性的input元素。这是问题吗?

<input type="text" name="meetingId" />
<input type="text" name="meetingid" />

请注意这两个示例中meetingId / meetingid的区分大小写。这是一个问题吗?

1 个答案:

答案 0 :(得分:2)

当QTP记录(或学习)一个对象时,它会捕获一组足以唯一标识该对象的属性/值。此外,如果启用了智能识别,它将捕获一些额外的属性/值对以供将来使用。

当执行测试时,如果找不到要识别的对象(没有元素与描述匹配或者有多个元素可以),它将尝试使用 extra 属性以便找到元素。

如果最初你的测试在没有触发智能识别的情况下运行,现在它被触发,则意味着HTML已经改变,因此描述不再唯一地标识元素,而QTP对测试描述的元素进行了有根据的猜测(显然在你的情况下,这是一个很好的猜测,因为测试仍然有效)。

QTP认为这是次优的,因为它确实是猜测,这就是智能识别出现在报告中的原因。实际上,提示您通过改进测试对象的描述来优化测试。


更多细节:如果对象标识对话框(Tools -> Object Identification)中定义的属性集不足以唯一标识该元素,QTP会添加序号标识符通常为Index类型,表示“与描述匹配的N元素中使用#X。序号标识符被认为是最后的手段,QTP将尝试使用智能标识之前使用序数标识符。因此,如果您的对象使用序数标识符,即使HTML页面根本没有更改,它也将使用智能识别 此规则的例外是,使用source index(并在QTP 11中开始生成的XPath表达式)可以帮助识别对象。如果它们处于活动状态(Tools -> Options -> Web -> Advanced -> Run settings)并且建议的元素与现有描述(不包括序号标识符)匹配,则使用智能识别

如果您检查Browser的对象标识,您会发现说明中列出了属性,因此如果存在多个浏览器,我们将始终获得序数和智能识别将尝试运行。