使用Watir网络驱动程序Firefox与JavaScript SignalR轮询



我正在与一个使用SignalR轮询的JavaScript密集型网站进行交互。这通常会导致Watir Web驱动程序在加载页面后超时。

我通过附加以下命令获得了部分成功:
driver.execute_script '$.connection.hub.stop();'
到每个页面导航指令,如转到或单击。

然而,这并不是在每个实例中都有效,因为我认为轮询有时在页面加载后才开始。在某些情况下,轮询也是通过选择单选按钮或复选框来触发的。

除了必须使用Timeout并在每次失败后重新访问页面之外,是否有可靠的方法来处理轮询?

我想知道你是否对你想要实现的目标感到困惑。我想我应该为操作创建一个处理程序,将代码传递给它们进行尝试,处理特定的异常并重试。

def action_handler(*arg, &code)
  begin
    code.call arg if block_given?
  rescue Some::Specific, Error::Classes => e
    @driver.execute_script '$.connection.hub.stop();'
    retry
  end
end
# ...
def whatever
  # ...
  action_handler { @browser.link(:id => 'obj').when_present.click }
  # ...
end

也许还有更好的JavaScript方法可以停止轮询——也许是return window.stop();?还是throw new Error("BOOM!");?还是$.connection.hub.abort()?(一些读数。)

为了让你的代码变得干燥,你可以在Watir Webdriver ymmv中进行monkey补丁Timer或Element之类的东西。

最新更新