【问题标题】:How does the .Exist timeout work within QTP?.Exist 超时如何在 QTP 中工作?
【发布时间】:2012-12-31 11:32:30
【问题描述】:

我已经使用 .Exist 方法工作了很多次,但我最近使用 QTP 11 转移到了一个新项目(现在使用 WPF 应用程序)(而之前我使用的是 QTP 10)。

现在我想使用object.Exist(2) 检查消息是否不存在。奇怪的是,我只在大约 23 秒后得到结果,而不是我预期的 2 秒。

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

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

QTP v10 和 v11 之间的超时行为是否发生了变化? 为什么说一个对象不存在需要这么长时间?

【问题讨论】:

    标签: object vbscript runtime qtp exists


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我检查了我遇到问题的每个 WPFbutton 对象;原来他们已经将智能识别转到False 并且也显示为灰色。
      • 父对象呢?在测试结果中,是否有任何迹象表明正在使用智能识别?
      • 父对象也没有智能标识。测试父窗口是否存在非常快(并且父窗口确实存在)。
      【解决方案3】:

      您遇到的额外时间是默认超时设置,默认设置为 20 秒。任何 Wait 或 Exist 计时器都将叠加在默认超时之上。

      可以在测试设置中更改:

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

      或在 vbscript 中:

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

      【讨论】:

      • 但是我不应该传递一个超时参数覆盖这个.Exist的默认超时设置吗?我的意思是,这就是为 .Exist 语句传递数字的全部意义,不是吗?为什么我的超时参数被添加到默认超时而不是替换它?
      【解决方案4】:

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

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-09-17
          • 2016-11-23
          • 2015-10-02
          • 1970-01-01
          • 1970-01-01
          • 2013-08-02
          • 2012-03-12
          • 2016-09-05
          相关资源
          最近更新 更多