拦截浏览器在watir中触发的onload事件

时间:2012-03-27 07:10:18

标签: ruby watir

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

E.g。

# 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

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