【问题标题】:intercepting the onload event fired by the browser in watir在 watir 中拦截浏览器触发的 onload 事件
【发布时间】:2012-03-27 19:46:34
【问题描述】:

我这里的情况很特殊。如果表单中有一些错误,我在表单上有一个按钮,它会产生一个弹出窗口。 [我知道这不是好的做法,但产品的开发人员不会改变这种行为!] 如果正确填充了所有必填字段,表单将导航到不同的页面。现在,我需要编写一个脚本来单击表单上的“提交”按钮,该按钮可能会产生一个弹出窗口或导航到下一页。

我在“提交”按钮上使用了 click_no_wait,并按照Javascript Popups in Watir 使用 AutoIt 处理了弹出窗口。现在,如果所有信息都有效并且表单导航到下一页,我会按照How to wait with Watir 中描述的一些技术在脚本中使用延迟。我正在使用 Watir::wait_until() 在脚本中等待。

现在有时由于一些网络问题,提交表单时需要一些时间才能转到下一页(报告生成)页面,因此脚本由于 wait_until 中指定的超时值而失败。

我想知道是否有办法在 Watir 中拦截 HTML 页面的 onload 事件,因为在加载整个页面之前不会触发 onload 事件。通过这种方式,我可以准确估计超时值,而不是尝试它。因此,我的脚本将通过 100% 而不是现在说 98%。

感谢您对此主题的任何帮助。

【问题讨论】:

    标签: ruby watir


    【解决方案1】:

    您可以尝试为超时设置救援,然后在遇到超时时循环合理的次数(2 次或 3 次?)。

    例如

    # All your button clicking and autoit stuff here
    i = 0
    begin
      b.wait_until{ # the thing you're waiting to happen }
      rescue TheSpecificTimeOutException 
      # Sorry I can't remember it, the command prompt will tell you exactly 
      # which one
       if i < 3
         i += 1
         retry
       else
         raise
       end
     end
    

    我确定我在上面会搞砸一些东西,或者会有更简洁的方法来做这件事,但你明白了。当它超时时,在放弃之前再试几次。

    【讨论】:

    • 感谢您的提示!我只是想要一个更健壮的方式,我认为如果可以拦截 onload 事件,它可能会非常健壮!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多