使用 Watir-Webdriver, ,如何在单击链接后等待页面加载?

目前我正在做:

sleep n

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

是否有一种方法可以测试页面是否准备就绪或页面中是否有某个元素。我了解普通的沃特宝石 Watir::Waiter.wait_until 或类似的内容,但我在WebDriver版本中看不到这一点。

有帮助吗?

解决方案

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

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

这就是我处理等待某些内容的方式:

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

其他提示

今天的版本增加了一个可选的要求,它会带来一些助手等待元素。这些(目前)在Watir 1.6中尚未可用,因此请注意,您是否并排使用两个库。

检查页面上的页面 Ajax并等待元素 在Watir-Webdriver Wiki中

最好的摘要在这里找到: 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' }

这就是我在项目中等待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

browser.wait_until 方法可以使用它更有帮助您可以定义要等待什么 () 作为 browser.wait_until(browser.text.include("some text"))

您可以使用wait_until ....

或者

Waituntilexists方法

我遇到了同样的问题,我尝试通过梳理来解决它 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") 存在

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top