2010-08-17 2 views
14

En utilisant watir-webdriver, comment puis-je attendre le chargement d'une page après avoir cliqué sur un lien?watir-webdriver attendre le chargement de la page

Au moment je suis en train de faire:

sleep n 

Mais ce n'est pas idéal comme la réponse de page varie beaucoup.

Y at-il une méthode pour tester si la page est prête ou s'il y a un certain élément dans la page. Je comprends dans le joyau normal watir il ya Watir::Waiter.wait_until ou quelque chose de similaire, mais je ne peux pas le voir dans la version webdriver.

+2

Etes-vous en train d'essayer d'attendre que la page soit complètement chargée? Je pensais que c'était un comportement standard ... – NinjaCat

+0

En fait, vous avez raison. Cependant, la raison pour laquelle je dois dormir est parce que j'ai ajax mis à jour le contenu de la page. Je veux attendre que la réponse soit réussie. – sfusion

Répondre

13

Je ne sais pas si elles sont la meilleure façon, mais c'est la façon dont je traitais cela pour attendre la mise à jour div pour effacer:

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

Voilà comment je poignée en attendant quelque chose à afficher:

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

+0

cool cela fonctionne parfaitement dans Firefox, pas si bien en chrome. je suis allé avec: sleep 1 jusqu'à ce que browser.div (: foo => 'bar'). Existe? – sfusion

+6

La méthode ci-dessus n'est pas recommandée car elle risque de ne jamais renvoyer et verrouiller vos scripts (erreur javascript, changement de code, etc.). Watir :: Waiter.wait_until (15) {browser.div (: id => "updated_div) .visible?} – JEH

+0

désolé mais cela n'a pas fonctionné pour moi !! – whizcreed

0

vous pouvez utiliser wait_until ....

ou

méthodes waituntilExists

7

Le communiqué d'aujourd'hui ajoute une option exige que apporte quelques aides pour attendre des éléments. Ceux-ci ne sont pas (pour l'instant) disponibles dans Watir 1.6, alors soyez conscient si vous utilisez les deux bibliothèques côte à côte.

Vérifiez la page sur AJAX and waiting for elements dans la méthode Watir-WebDriver Wiki

1

browser.wait_until peut être utilisé son plus utile que vous pouvez définir quoi attendre dans () comme browser.wait_until(browser.text.include("some text"))

0

je rencontre les mêmes problèmes avec vous et je tente de le réparer en peignant la méthode wait_until_present et les until browser.div(:id=>"some_div").exists? do sleep 1 end tours par @marc à prévoir couvrent:

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 

et être remarqué qu'il est de votre propre responsabilité de vous assurer que le div(:id => "some_div")faire existe

1

Le meilleur résumé se trouve ici: http://watirwebdriver.com/waiting/

Ici, il est en un mot:

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

Voilà comment j'attends AJAX dans mon projet ...

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 
Questions connexes