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

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

В настоящий момент я делаю:

sleep n

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

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

Ответы

Ответ 1

Я не знаю, лучший ли это способ, но так я обрабатываю это для ожидания обновления div:

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

Вот как я обрабатываю ожидание отображения чего-то:

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

Ответ 2

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

Проверьте страницу AJAX и ожидайте элементы в Wiki-браузере Watir

Ответ 3

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

Ответ 4

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

Ответ 5

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

или

waituntilExists методы

Ответ 6

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

Ответ 7

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