.Exist超时如何在QTP中工作?

时间:2013-01-17 00:40:33

标签: object vbscript runtime qtp exists

我已经使用.Exist方法了很多,但我最近搬到了一个新项目(现在使用WPF应用程序)和QTP 11(而之前我有QTP 10)。

现在,我想使用object.Exist(2)检查邮件是否存在。奇怪的是,我只在~23秒后得到一个结果,而不是我期待的2秒。

超时如何工作?在以前的项目中,在确定对象不存在之前,使用object.Exist(2)将等待2秒。 QTP帮助文件还说它应该只等待2秒(指定的超时参数)。 现在,似乎它正在等待超时参数(2秒)和对象同步超时(20秒)。

此外,智能识别已禁用,因此不应等待。使用Object Repository突出显示对象会立即说明该对象不存在。

QTP v10和v11之间的超时行为是否已更改? 为什么说对象不存在需要这么长时间?

5 个答案:

答案 0 :(得分:2)

Exist方法不适用于最后一个对象。 它按层次结构工作 - 这意味着此方法在检查最后一个父对象之前检查每个父对象。 超时仅适用于最后一个对象。 如果您想立即收到答案,我建议您使用以下代码 -

if WPFWindow("x").Exist(0) Then
   if WPFWindow("x").WPFButton("y").Exist(0) Then
     'action 
   End if
End if

答案 1 :(得分:0)

确保没有为对象存储库中的测试对象启用“智能标识”。这可能会妨碍你。

答案 2 :(得分:0)

您遇到的额外时间是默认超时设置,默认情况下设置为20秒。任何等待或存在的计时器都将堆叠在默认超时之上。

可以在测试设置中更改:

Test Settings > Run > Object synchronization timeout - set in seconds

或在vbscript中:

Setting("DefaultTimeout") = 4000 'set in milliseconds

答案 3 :(得分:0)

在驱动程序脚本的开头使用DefaultTimeout函数就足够了。

Setting("DefaultTimeout") = 10000   'set in milliseconds

如果任何对象超过上述超时限制10秒,则该对象将无法捕获,运行结果将显示失败

答案 4 :(得分:0)

我建议只使用默认超时时间。使用.Exist(x)将为每个孩子使用提到的时间。