2010-08-17 3 views
14

Использование watir-webdriver, как я могу ждать загрузки страницы после того, как я нажму ссылку?watir-webdriver wait for page load

На данный момент я делаю:

sleep n 

Но это не является идеальным, поскольку ответ страницы меняется так сильно.

Есть ли способ проверить, готова ли страница или есть ли какой-либо элемент на странице. Я понимаю, что в обычном драгоценном камне есть Watir::Waiter.wait_until или что-то подобное, но я не вижу этого в версии webdriver.

+2

Вы пытаетесь сделать что-то ждать, пока страница не будет полностью загружена? Я думал, что это стандартное поведение ... – NinjaCat

+0

На самом деле вы правы. Однако причиной, по которой мне приходится спать, является то, что у меня есть ajax, обновляющий содержимое страницы. Я хочу подождать, пока ответ не будет успешным. – sfusion

ответ

13

Я не знаю, если они лучшим образом, но это, как я ее обработки для ожидания обновления DIV очистить:

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

Это, как я ручка ждет что-то для отображения:

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

+0

круто это отлично работает в firefox, не так отлично в хроме. Я пошел с: спать 1 до тех пор, пока browser.div (: foo => 'bar'). – sfusion

+6

Вышеуказанный метод не рекомендуется, так как он никогда не сможет вернуться и заблокировать ваши скрипты (ошибка JavaScript, изменение кода и т. Д.). Watir :: Waiter.wait_until (15) {browser.div (: id => "update_div) .visible?} – JEH

+0

извините, но это не сработало для меня !! – whizcreed

0

вы можете использовать wait_until ....

или

waituntilExists методы

7

Сегодняшний выпуск добавляет дополнительный требует, который приносит в некоторых помощников для ожидания элементов. Они не доступны (в данный момент) в Watir 1.6, поэтому имейте в виду, что вы используете обе библиотеки рядом друг с другом.

Проверьте страницу на AJAX and waiting for elements в Watir-WebDriver Wiki

1

browser.wait_until метод можно использовать его более полезным, вы можете определить, что ждать в (), как browser.wait_until(browser.text.include("some text"))

0

Я встречаю те же проблемы с вами , и я пытаюсь исправить это расчесывание wait_until_present метод и until browser.div(:id=>"some_div").exists? do sleep 1 end трюки povided по @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")сделать существуют

1

Лучшее резюме находится здесь: http://watirwebdriver.com/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' } 
0

Это, как я жду 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