watir-webdriver ожидает загрузки страницы - PullRequest
18 голосов
/ 17 августа 2010

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

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

sleep n

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

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

Ответы [ 7 ]

12 голосов
/ 18 августа 2010

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

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

как я справляюсь с ожиданием отображения чего-либо:

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

7 голосов
/ 31 августа 2010

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

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

4 голосов
/ 24 июля 2014

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

Вот как я жду 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 голос
/ 05 ноября 2012
Можно использовать метод

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

0 голосов
/ 25 августа 2013

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

0 голосов
/ 27 августа 2010

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

или

waituntilExists

...