18

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

目前我正在使用:

sleep n

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

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

4

7 回答 7

11

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

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

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

until browser.div(:id=>"some_div").exists? do sleep 1 end
于 2010-08-18T07:40:17.247 回答
7

今天的版本增加了一个可选的 require ,它引入了一些等待元素的助手。这些(目前)在 Watir 1.6 中不可用,因此请注意是否并排使用这两个库。

查看Watir-webdriver Wiki 中的“ AJAX 和等待元素”以获取更多信息。

于 2010-08-31T19:44:18.950 回答
4

最好的总结在“等待”中。

简而言之,就是这样:

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' }
于 2014-07-24T00:19:44.067 回答
1

browser.wait_until可以使用。

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

browser.wait_until(browser.text.include("some text"))
于 2012-11-05T11:12:35.617 回答
1

这就是我在项目中等待 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
于 2017-08-08T17:29:58.063 回答
0

您可以使用wait_untilorwaituntilExists方法。

于 2010-08-27T12:57:57.550 回答
0

我有同样的问题,我试图通过结合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")

确实存在。

于 2013-08-25T04:07:32.203 回答