watir-webdriver等待页面加载

时间:2010-08-17 15:47:05

标签: watir webdriver watir-webdriver firewatir safariwatir

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

我正在做的那一刻:

sleep n

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

是否有方法来测试页面是否准备就绪或页面中是否存在某个元素。我理解正常的watir gem有Watir::Waiter.wait_until或类似的东西,但我在webdriver版本中看不到这一点。

7 个答案:

答案 0 :(得分:11)

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

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

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

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

答案 1 :(得分:7)

今天的版本增加了一个可选的需求,它带来了一些等待元素的助手。这些(目前)不适用于Watir 1.6,因此请注意并排使用这两个库。

检查Watir-webdriver Wiki

AJAX and waiting for elements上的页面

答案 2 :(得分:3)

最佳摘要见:http://watir.com/guides/waiting/

简而言之:

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' }

答案 3 :(得分:1)

可以使用

browser.wait_until方法更有帮助您可以在()中定义要等待的内容browser.wait_until(browser.text.include("some text"))

答案 4 :(得分: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

答案 5 :(得分:0)

你可以使用wait_until ....

waituntilExists方法

答案 6 :(得分:0)

我遇到了同样的问题,我尝试通过梳理wait_until_present方法和@marc所提供的until browser.div(:id=>"some_div").exists? do sleep 1 end技巧来解决这个问题:

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") 执行存在是您自己的责任