【问题标题】:Dynamic waits in QTPQTP 中的动态等待
【发布时间】:2015-02-19 12:58:12
【问题描述】:

我正在使用 QTP 测试网站,以确保所有链接都在脚本访问的页面上工作/我使用 QTP 拥有的标准检查点来执行此操作。我遇到的一个问题是,由于页面上的图片和其他 Web 元素,某些页面需要花费大量时间来加载。当页面需要很长时间加载时,有时会导致检查点失败,因为脚本在导航之前不会捕获页面上的所有链接(或者至少这是我的理解)。我通过在所有页面上插入一个 wait(10) 来解决这个问题,并且在 98% 的时间里它确实有效(有些页面有可怕的延迟时间)。但我想知道有没有办法编写一个脚本,让它等到页面完全加载后再移动到检查点?

我的代码看起来像

Browser(Blah).Navigate URL
wait(10)
Browser(blah).Page(X).Check Checkpoint(K)
Browser(Blah).Navigate URL2
wait(10)
Browser(blah).Page(X).Check Checkpoint(K2)

根据我正在运行的脚本,它可以检查多达 200 个页面并且需要几个小时才能运行,所以我希望如果我可以在每个页面上使用静态等待来解决问题,我可以提高性能。

【问题讨论】:

    标签: vba qtp


    【解决方案1】:

    使用 ReadyState 枚举:(MSDN page)

    Enum READYSTATE
        READYSTATE_UNINITIALIZED = 0
        READYSTATE_LOADING = 1
        READYSTATE_LOADED = 2
        READYSTATE_INTERACTIVE = 3
        READYSTATE_COMPLETE = 4
    End Enum
    
    With Browser(blah)
        .Navigate URL
        '// Wait until page has fully loaded.
        While Not .ReadyState = READYSTATE_COMPLETE
            DoEvents
        Wend
    
    '// Rest of code here...
    End With
    

    【讨论】:

      【解决方案2】:

      添加检查点时,您还可以将 Checkpoint Timeout 配置为 n 秒数,默认设置为 10 秒.

      例如如果您将此设置为 20 秒,并且如果您的检查点在 10 秒内通过,那么 QTP 将立即进行下一步。如果检查点在 20 秒内未通过,则将其标记为失败。

      尽可能避免使用Wait 语句,尝试探索其他选项,例如.Sync.Exist

      【讨论】:

      • 很好的答案,QTP 将等待页面的readyState 值为complete,因此没有理由等待浏览器的readyState。另一个需要考虑的函数(SyncExist)是 WaitProperty
      猜你喜欢
      • 2020-06-13
      • 1970-01-01
      • 2018-09-17
      • 1970-01-01
      • 2013-11-26
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多