how to scroll a web page using watir

老子叫甜甜 提交于 2020-01-31 04:31:15

问题


I am trying to scroll a web page to find and click on a content that is lazily loaded when the page is scrolled. I am using following command

require 'watir-webdriver'

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

I am using web-driver with firefox and I am on ubuntu but it is not working. In the following ruby code I am trying to scroll the page down until I don't find the element with :id. The element is loading lazily. I am getting timeout after few seconds, any idea what is wrong with the following code.

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

What is the best way to scroll a page using watir-driver ?


回答1:


If you have JavaScript enabled, you can access the underlying driver and execute some JavaScript to scroll on the page.

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

will scroll down the page 200 pixels along the y axix.

See here for documentation of the method:

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




回答2:


I use a gem called "watir-scroll" to assist me with this. Though it usually needs places to scroll to, it also will scroll to coordinates.

https://github.com/p0deje/watir-scroll Since Watir v6.16 watir-scroll gem merged into watir

You can either scroll to a specific element

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

Or just scroll to the top middle or center

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

Or scroll to a coordinate

browser.scroll.to [0, 200]



回答3:


Sorry I could not comment on the last answer since I am new here and do not have enough rep pts yet so I just created a new answer. Anyways, if anyone is having issues with scrolling multiple times try this (add a loop and sleep):

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 may vary depending on how long it takes the page to load. 0.15 is 0.15 seconds so adjust as needed to allow for enough time for the page to load. The 200 may also need to be adjusted to a larger pixel amount.




回答4:


This saved me a bunch of time:

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



回答5:


You can access the underlying driver and execute some javascript. For instance if you wanted to scroll to the bottom of the page you would use

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

which scrolls to the bottom of the page on the y-axis.




回答6:


It works

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


来源:https://stackoverflow.com/questions/13608890/how-to-scroll-a-web-page-using-watir

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!