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

问题描述 投票:17回答:7

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

目前正在使用:

sleep n

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

有没有一种方法可以测试页面是否已准备好或页面中是否存在某些元素?我知道在普通的Watir宝石中有Watir::Waiter.wait_until或类似的东西,但在webdriver版本中看不到。

webdriver watir firewatir safariwatir
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

7
投票

今天的发行版增加了一个可选的要求,该要求引入了一些用于等待元素的助手。这些(目前)在Watir 1.6中不可用,因此请注意是否同时使用两个库。

在Watir-webdriver Wiki中检查“ AJAX and waiting for elements”以获取更多信息。


3
投票

最佳摘要位于“ 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' }

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

1
投票

browser.wait_until可以使用。

这很有帮助,因为您可以在参数(())中定义要等待的内容,如:

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

0
投票

您可以使用wait_untilwaituntilExists方法。


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")

确实存在。

© www.soinside.com 2019 - 2024. All rights reserved.