2010-08-17 6 views
14

Utilizzo di watir-webdriver, come posso caricare una pagina dopo aver fatto clic su un collegamento?watir-webdriver attendere caricamento pagina

Al momento sto facendo:

sleep n 

Ma questo non è l'ideale come la risposta pagina varia così tanto.

Esiste un metodo per verificare se la pagina è pronta o se esiste un determinato elemento nella pagina. Capisco che nella normale gemma watir ci sia Watir::Waiter.wait_until o qualcosa di simile, ma non riesco a vederlo nella versione del webdriver.

+2

Stai cercando di fare qualcosa fino a dopo che la pagina è stata caricata completamente? Pensavo fosse un comportamento standard ... – NinjaCat

+0

In realtà hai ragione. Tuttavia, la ragione per cui sto dormendo è perché ho qualche ajax che aggiorna il contenuto della pagina. Voglio aspettare che la risposta abbia successo. – sfusion

risposta

13

Non so se sono il modo migliore, ma questo è come sto manipolazione di questo per l'attesa per l'aggiornamento div per cancellare:

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

Questo è come gestire aspettando qualcosa da visualizzare:

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

+0

cool questo funziona perfettamente in Firefox, non così grande in cromo. sono andato con: sleep 1 fino a browser.div (: foo => 'bar'). Esiste? – sfusion

+6

Il metodo sopra non è raccomandato perché potrebbe non restituire mai e bloccare i propri script (errore javascript, cambio di codice, ecc.). Watir :: Waiter.wait_until (15) {browser.div (: id => "update_div) .visible?} – JEH

+0

scusate ma questo non ha funzionato per me !! – whizcreed

0

è possibile utilizzare wait_until ....

o

waituntilExists metodi di rilascio

7

di oggi aggiunge un optional richiedono che porta in alcuni aiutanti per l'attesa per gli elementi. Questi non sono (al momento) disponibili in Watir 1.6, quindi sappiate che entrambe le librerie sono affiancate.

Controllare la pagina sul AJAX and waiting for elements nel Watir-WebDriver Wiki

1

browser.wait_until metodo può essere usato la sua più utili è possibile definire cosa aspettare in () come browser.wait_until(browser.text.include("some text"))

0

mi capita di incontrare gli stessi problemi con te , e cerco di risolvere il problema da pettinatura wait_until_present metodo ei trucchi until browser.div(:id=>"some_div").exists? do sleep 1 end povided da @ 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 

e da notare che è il proprio responsabilità di assicurarsi che la div(:id => "some_div")fare esistono

1

La migliore sintesi si trova qui: http://watirwebdriver.com/waiting/

Qui è in poche parole:

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

Questo è come mi aspetto AJAX nella mia progetto ...

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