我怎样才能使.goto无阻塞?

时间:2017-11-15 12:16:50

标签: watir watir-webdriver

我正在编写一个rails应用程序,它使用Watir和Chrome Headless从HTML页面获取文本。到目前为止一切都很好!

当我请求一个加载时间很长的页面来完全加载所有元素时,问题就开始了,尽管事实上我并不需要它们。

我使用的当前代码:

browser = Watir::Browser.new :chrome, headless: true

browser.goto(url)

然而,.goto函数调用将阻塞,直到所有元素都已加载。这不是我真正需要的 - 我需要的是让goto开始获取页面,然后继续运行代码,因为我真的只想等到我需要的文本存在,然后获取它。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

Goto不会离开控件直到60秒,如果页面加载时间超过60秒,那么它会抛出错误。此外,ld与Goto的页面加载无关。你需要设置page_load的时间,你可以直接调用selenium驱动程序,如下所示,因为Watir没有提供任何systax

写下面的代码,你可以实现你想要的目标

Watir.default_timeout

然后你可以在这里写下你的其余代码,例如,

 begin
  b.driver.manage.timeouts.page_load=5
  b=Watir::Browser.new
  b.goto(url)
rescue            #I have written the rescue block here because goto will the error for you If page is not loaded within a given time
end

这里发生的是,goto将阻止代码的执行,然后goto持续5秒,然后它将落入救援块,因此程序将继续按预期执行下一行。

答案 1 :(得分:1)

使用新的w3c webdriver规范,您可以将页面加载策略设置为“none”。 https://w3c.github.io/webdriver/webdriver-spec.html#navigation

只有Firefox和IE可能已实现此功能。