watir-webdriver ждать загрузки страницы

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

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

sleep n

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

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

7 ответов


Я не знаю, являются ли они лучшим способом, но вот как я обрабатываю это для ожидания обновления 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


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


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

лучшее резюме можно найти здесь: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' }

вы можете использовать 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") do exist