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