我已经使用.Exist
方法了很多,但我最近搬到了一个新项目(现在使用WPF应用程序)和QTP 11(而之前我有QTP 10)。
现在,我想使用object.Exist(2)
检查邮件是否存在。奇怪的是,我只在~23秒后得到一个结果,而不是我期待的2秒。
超时如何工作?在以前的项目中,在确定对象不存在之前,使用object.Exist(2)
将等待2秒。 QTP帮助文件还说它应该只等待2秒(指定的超时参数)。
现在,似乎它正在等待超时参数(2秒)和对象同步超时(20秒)。
此外,智能识别已禁用,因此不应等待。使用Object Repository突出显示对象会立即说明该对象不存在。
QTP v10和v11之间的超时行为是否已更改? 为什么说对象不存在需要这么长时间?
答案 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)将为每个孩子使用提到的时间。