2012-11-28 18 views
9

Sto provando a scorrere una pagina Web per trovare e fare clic su un contenuto che viene caricato pigramente quando si scorre la pagina. Sto usando seguente comandocome scorrere una pagina web usando watir

require 'watir-webdriver' 

@browser = Watir::new :firefox 
@browser.send_keys :space 

Sto usando web-conducente con firefox e io sono su Ubuntu, ma non sta funzionando. Nel seguente codice rubino sto provando a scorrere la pagina verso il basso finché non trovo l'elemento con: id. L'elemento sta caricando pigramente. Ricevo un timeout dopo alcuni secondi, qualsiasi idea di cosa non funzioni con il seguente codice.

When /^deal (\d+) is loaded$/ do |id| 
    (0..5).each do |click|  
    @browser.send_keys :space 
    end 
end 

Qual è il modo migliore per scorrere una pagina utilizzando watir-driver?

risposta

16

Se JavaScript è abilitato, è possibile accedere al driver sottostante ed eseguire alcuni JavaScript per scorrere sulla pagina.

@browser.driver.executeScript("window.scrollBy(0,200)") 

scorrerà verso il basso la pagina 200 pixel lungo l'asse y.

Vedi qui per la documentazione del metodo:

http://www.w3schools.com/jsref/met_win_scrollby.asp

+9

Si noti che non c'è bisogno di accedere al driver per eseguire lo script.Puoi semplicemente fare: '@ browser.execute_script (" window.scrollBy (0,200) ")'. –

2

Spiacente non ho potuto commentare l'ultima risposta dato che io sono nuovo qui e non abbiamo ancora abbastanza punti rep così ho appena creato una nuova risposta . In ogni modo, se qualcuno sta avendo problemi con scrolling più volte provare questo (aggiungere un loop e dormire):

maximum_times_needed = max # of times you need the page to scroll down 

maximum_times_needed.each do 
@browser.driver.executeScript("window.scrollBy(0,200)") 
sleep 0.15 
end 

0.15 possono variare a seconda di quanto tempo ci vuole il caricamento della pagina. 0.15 è 0,15 secondi, quindi regolare come necessario per consentire il tempo sufficiente per il caricamento della pagina. Potrebbe anche essere necessario regolare il 200 su una quantità di pixel maggiore.

+0

perché non 'wait_until {block}'? metodi di attesa hardcoded = irritante – meatspace

2

Io uso una gemma chiamata "watir-scroll" per aiutarmi con questo. Anche se di solito ha bisogno di posti dove scorrere, scorre anche le coordinate.

https://github.com/p0deje/watir-scroll 

È possibile scorrere a un elemento specifico

button1 = @browser.input(:class => "mileage_rate") 
@browser.scroll.to button1 

O semplicemente scorrere al centro della parte superiore o al centro

@browser.scroll.to :top 
@browser.scroll.to :center 
@browser.scroll.to :bottom 

O scorrere fino a una coordinata

browser.scroll.to [0, 200] 
+2

fornisce 'metodo non definito scroll per # (NoMethodError)' – paul

+0

@paul - lo stesso qui. sto usando Ruby 1.8.7, watir 1.6.7, watir-webdriver 0.6.2 – stack1

0

Questo mi ha salvato un sacco di tim e:

browser.div(:id => 'start-date-holder').wd.location_once_scrolled_into_view 
0

È possibile accedere al driver sottostante ed eseguire alcuni javascript. Per esempio se si voleva scorrere fino alla fine della pagina si usa

@browser.driver.execute_script("window.scrollBy(0,document.body.scrollHeight)") 

, che scorre nella parte inferiore della pagina sul l'asse y.

0

Funziona

evaluate_script("document.getElementsByTagName('body')[0].scrollTop=0;")