如何使用 watir-webdriver 等待页面加载

发布于 2024-09-14 21:26:01 字数 327 浏览 7 评论 0原文

使用 watir-webdriver,如何在点击链接后等待页面加载?

目前我正在使用:

sleep n

但这并不理想,因为页面响应变化很大。

有没有办法测试页面是否准备好或者页面中是否存在某个元素?我知道在普通的 Watir gem 中有 Watir::Waiter.wait_until 或类似的东西,但我在 webdriver 版本中没有看到这个。

Using watir-webdriver, how do I wait for a page to load after I click a link?

At the moment I am using:

sleep n

But this is not ideal as the page response varies so much.

Is there a way to test whether the page is ready or whether there is a certain element in the page? I understand in the normal Watir gem there is Watir::Waiter.wait_until or something similar, but I don't see this in the webdriver version.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

月隐月明月朦胧 2024-09-21 21:26:02

这就是我在项目中等待 AJAX 的方式:

ajax_loader = $b.element(:xpath  => "//*[@id='spinner-modal-transparent' and @aria-hidden='true']/div/div/div/div/img[@alt='Ajax transparent loader']")

if ajax_loader.exists?
  ajax_loader.wait_while_present(timeout=350)
else
  puts "The AJAX loader was not present."
end

This is how I wait for AJAX in my project:

ajax_loader = $b.element(:xpath  => "//*[@id='spinner-modal-transparent' and @aria-hidden='true']/div/div/div/div/img[@alt='Ajax transparent loader']")

if ajax_loader.exists?
  ajax_loader.wait_while_present(timeout=350)
else
  puts "The AJAX loader was not present."
end
千柳 2024-09-21 21:26:02

可以使用browser.wait_until。

它更有帮助,因为您可以在参数 (()) 中定义要等待的内容,如下所示:

browser.wait_until(browser.text.include("some text"))

browser.wait_until can be used.

It's more helpful because you can define what to wait for in the parameters (()), as in:

browser.wait_until(browser.text.include("some text"))
傲世九天 2024-09-21 21:26:02

您可以使用 wait_untilwaituntilExists 方法。

You can use the wait_until or waituntilExists methods.

怎会甘心 2024-09-21 21:26:02

我遇到了同样的问题,我尝试通过结合 wait_until_present

until browser.div(:id=>"some_div").exists? do sleep 1 end

@marc 提供的技巧来修复它:

some_div = browser.div(:id => 'some_div')

begin 

  Watir::Wait.until
    some_div.visible?
  end

rescue Watir::Wait::TimeoutError

  until some_div.visible?
    sleep 1
  end
end

请注意,确保它确实

div(:id => "some_div")

存在是您自己的责任。

I had the same problem, and I tried to fix it by combining wait_until_present and

until browser.div(:id=>"some_div").exists? do sleep 1 end

tricks povided by @marc:

some_div = browser.div(:id => 'some_div')

begin 

  Watir::Wait.until
    some_div.visible?
  end

rescue Watir::Wait::TimeoutError

  until some_div.visible?
    sleep 1
  end
end

Notice that it is your own responsibility to make sure that

div(:id => "some_div")

does exist.

冬天旳寂寞 2024-09-21 21:26:01

我不知道它们是否是最好的方法,但这就是我处理等待更新 div 清除的方式:

while browser.div(:id=>"updating_div").visible? do sleep 1 end

这就是我处理等待显示内容的方式:

until browser.div(:id=>"some_div").exists? do sleep 1 end

I don't know if they're the best way, but this is how I'm handling this for waiting for an updating div to clear:

while browser.div(:id=>"updating_div").visible? do sleep 1 end

This is how I handle waiting for something to display:

until browser.div(:id=>"some_div").exists? do sleep 1 end
删除会话 2024-09-21 21:26:01

今天的版本添加了一个可选要求,引入了一些等待元素的帮助程序。这些(目前)在 Watir 1.6 中不可用,因此如果您同时使用这两个库,请注意。

检查“AJAX 并等待元素” Watir-webdriver 维基百科了解更多信息。

Today's release adds an optional require that brings in some helpers for waiting for elements. These are not (at the moment) available in Watir 1.6, so be aware if you use both libraries side by side.

Check "AJAX and waiting for elements" in the Watir-webdriver Wiki for more information.

静若繁花 2024-09-21 21:26:01

最好的总结可以在“等待”中找到。

简而言之:

require 'watir-webdriver'
b = Watir::Browser.start 'bit.ly/watir-webdriver-demo'
b.select_list(:id => 'entry_1').wait_until_present
b.text_field(:id => 'entry_0').when_present.set 'your name'
b.button(:value => 'Submit').click
b.button(:value => 'Submit').wait_while_present
Watir::Wait.until { b.text.include? 'Thank you' }

The best summary is found in "Waiting".

This is it in a nutshell:

require 'watir-webdriver'
b = Watir::Browser.start 'bit.ly/watir-webdriver-demo'
b.select_list(:id => 'entry_1').wait_until_present
b.text_field(:id => 'entry_0').when_present.set 'your name'
b.button(:value => 'Submit').click
b.button(:value => 'Submit').wait_while_present
Watir::Wait.until { b.text.include? 'Thank you' }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文