2012-11-28 24 views
9

Próbuję przewinąć stronę internetową, aby znaleźć i kliknąć zawartość, która jest leniwie ładowana podczas przewijania strony. Korzystam z następującej komendy: Używam sterownika internetowego z firefoxem i jestem na Ubuntu, ale to nie działa. W poniższym kodzie ruby ​​próbuję przewinąć stronę, aż nie znajdę elementu z: id. Element ładuje się leniwie. Otrzymuję limit czasu po kilku sekundach, każdy pomysł co jest nie tak z poniższym kodem.przewijanie strony internetowej przy użyciu watir

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

Jaki jest najlepszy sposób przewijania strony przy użyciu sterownika Watir?

Odpowiedz

16

Jeśli masz włączoną obsługę JavaScript, możesz uzyskać dostęp do podstawowego sterownika i wykonać skrypt JavaScript, aby przewinąć stronę.

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

przewinie w dół stronę 200 pikseli wzdłuż osi Y.

Patrz tutaj dla dokumentacji metody:

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

+9

Zauważ, że nie masz dostępu do sterownika do wykonywania skryptu.Możesz po prostu zrobić: '@ browser.execute_script (" window.scrollBy (0,200) ")'. –

2

Niestety nie mogę wypowiedzieć się na temat ostatniego odpowiedź, ponieważ jestem tu nowy i nie mają jeszcze wystarczającej pkt rep więc po prostu stworzył nową odpowiedź . Tak czy inaczej, jeśli ktoś ma problemy z przewijania wielokrotnie spróbuj tego (dodać pętlę i snu):

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 mogą się różnić w zależności od tego, jak długo to trwa stronę do załadowania. 0.15 to 0,15 sekundy, więc dostosuj je, aby uzyskać wystarczającą ilość czasu na załadowanie strony. 200 może również wymagać dostosowania do większej ilości pikseli.

+0

dlaczego nie 'wait_until {block}'? metody ciągłego odczekiwania = irytujące – meatspace

2

Używam klejnotu zwanego "watir-scroll", aby mi w tym pomóc. Chociaż zwykle trzeba miejsc do przewijania, to będzie również przewijać do współrzędnych.

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

Można też przejść do konkretnego elementu

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

Albo po prostu przewinąć do górnej połowy lub centrum

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

lub przewinąć do współrzędnych

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

daje 'niezdefiniowaną metodę przewijania # # Watir :: Przeglądarka: 0x314d858> (NoMethodError)' – paul

+0

@paul - to samo tutaj. używam ruby ​​1.8.7, watir 1.6.7, watir-webdriver 0.6.2 – stack1

0

To zaoszczędziło mi sporo czasu e:

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

Możesz uzyskać dostęp do podstawowego sterownika i wykonać trochę javascript. Na przykład, jeśli chcesz, aby przewinąć do dołu strony należałoby użyć

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

który przewija się w dolnej części strony na osi y.

0

Działa

evaluate_script("document.getElementsByTagName('body')[0].scrollTop=0;") 
Powiązane problemy