2012-11-28 5 views
9

웹 페이지를 스크롤하여 페이지가 스크롤 될 때 느리게로드되는 내용을 찾아서 클릭하려고합니다. 나는 파이어 폭스로 웹 드라이버를 사용하고 내가 우분투 오전watir을 사용하여 웹 페이지를 스크롤하는 방법

require 'watir-webdriver' 

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

나는 다음 명령을 사용하고 있지만 작동하지 않습니다. 다음 루비 코드에서 요소를 찾지 않을 때까지 페이지를 아래로 스크롤하려고합니다 : id. 요소가 느리게로드됩니다. 몇 초 후에 시간 초과가 발생합니다. 다음 코드에 어떤 문제가 있는지 생각해보십시오.

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

Watir과 드라이버를 사용하여 페이지를 스크롤하는 가장 좋은 방법은 무엇입니까?

답변

16

JavaScript가 활성화 된 경우 기본 드라이버에 액세스하고 일부 JavaScript를 실행하여 페이지를 스크롤 할 수 있습니다.

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

는 Y의 axix 따라 페이지 (200 개)의 픽셀을 아래로 스크롤한다.

는 방법의 문서 여기를 참조하십시오 :

내가 여기에 새로운 오전 그래서 난 그냥 새로운 답을 만들어 아직 충분히 담당자 점을 가지고 있지 않기 때문에 나는 마지막 대답에 대해 언급 할 수 없습니다

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

+9

참고 작동합니다.당신은 할 수 있습니다 :'@ browser.execute_script ("window.scrollBy (0,200)")'. –

2

죄송합니다 . 사람이 스크롤에 문제가 있는지 어쨌든, 여러 번 (루프와 잠을 추가)이 시도 :

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 그것이로드 페이지 걸리는 시간에 따라 달라질 수 있습니다. 0.15은 0.15 초이므로 페이지를로드하는 데 충분한 시간을 허용하도록 필요에 따라 조정하십시오. 200은 더 큰 픽셀 양으로 조정될 필요가 있습니다.

+0

왜'wait_until {block}'이 아니겠습니까? 하드 코드 된 대기 메서드 = 자극 – meatspace

2

나는 이것을 도와주기 위해 "watir-scroll"이라고 불리는 보석을 사용합니다. 일반적으로 스크롤 할 곳이 필요하지만 좌표로 스크롤됩니다.

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

당신은 하나의 좌표

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

하거나 상단 중앙 또는 중앙 A와

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

또는 스크롤로 이동 특정 요소에 스크롤 할 수 있습니다

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

# (NoMethodError)'에 대해 정의되지 않은 메서드 스크롤을 제공합니다. – paul

+0

@paul - 여기와 동일합니다. 나는 1.8.7, watir 1.6.7, watir-webdriver 0.6.2를 사용하고있다. – stack1

0

이것은 나에게 많은 시간을 구해줬다. 전자는 :

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

당신은 기본 드라이버를 액세스하고 일부 자바 스크립트를 실행할 수 있습니다. 당신이 페이지 하단으로 스크롤하기를 원한다면 예를 들어 당신은 y 축에 페이지 하단으로 스크롤

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

을 사용합니다.

0

그것은 당신이 스크립트를 실행하는 드라이버에 액세스 할 필요가 없습니다

evaluate_script("document.getElementsByTagName('body')[0].scrollTop=0;") 
관련 문제