Как прокручивать веб-страницу с помощью watir

Я пытаюсь прокрутить веб-страницу, чтобы найти и нажать на контент, который лениво загружается при прокрутке страницы. Я использую следующую команду

require 'watir-webdriver'

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

Я использую веб-драйвер с firefox, и я нахожусь на ubuntu, но он не работает. В следующем коде ruby ​​я пытаюсь прокрутить страницу до тех пор, пока не найду элемент с: id. Элемент загружается лениво. Я получаю таймаут через несколько секунд, любая идея, что не так со следующим кодом.

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

Каков наилучший способ прокрутки страницы с помощью watir-драйвера?

Ответ 1

Если у вас включен JavaScript, вы можете получить доступ к базовому драйверу и выполнить некоторый JavaScript для прокрутки на странице.

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

будет прокручиваться вниз по странице 200 пикселей вдоль оси y.

См. здесь документацию по методу:

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

Ответ 2

Я использую драгоценный камень, называемый "watir-scroll", чтобы помочь мне в этом. Хотя обычно для этого требуются места для прокрутки, он также будет прокручиваться до координат.

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

Вы можете либо перейти к определенному элементу

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

Или просто выделите верхнюю середину или центр

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

Или выделите координату

browser.scroll.to [0, 200]

Ответ 3

Извините, я не смог прокомментировать последний ответ, так как я новичок здесь и не имею достаточного количества отзывов, поэтому я только что создал новый ответ. В любом случае, если у кого-то возникают проблемы с прокруткой несколько раз, попробуйте это (добавьте цикл и сон):

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 также может быть настроен на большее количество пикселей.

Ответ 4

Это спасло мне кучу времени:

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

Ответ 5

Вы можете получить доступ к базовому драйверу и выполнить некоторый javascript. Например, если вы хотите прокрутить страницу до нижней части страницы, вы должны использовать

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

который прокручивается в нижней части страницы по оси y.

Ответ 6

Работает

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