![](/img/trans.png)
[英]How to avoid timout by NOT using sleep in Ruby watir web page scripting?
[英]how to scroll a web page using 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-driver 滾動頁面的最佳方式是什么?
如果啟用了 JavaScript,則可以訪問底層驅動程序並執行一些 JavaScript 以在頁面上滾動。
@browser.driver.executeScript("window.scrollBy(0,200)")
將沿 y 軸向下滾動頁面 200 像素。
有關該方法的文檔,請參見此處:
我使用一個名為“watir-scroll”的 gem 來幫助我。 雖然它通常需要滾動到位置,但它也會滾動到坐標。
https://github.com/p0deje/watir-scroll自 Watir v6.16 watir-scroll
gem 合並到watir
您可以滾動到特定元素
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]
這節省了我很多時間:
browser.div(:id => 'start-date-holder').wd.location_once_scrolled_into_view
抱歉,我無法對最后一個答案發表評論,因為我是新來的,而且還沒有足夠的代表,所以我剛剛創建了一個新答案。 不管怎樣,如果有人在多次滾動時遇到問題,試試這個(添加一個循環並休眠):
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可能還需要調整到更大的像素量。
300.times do
@browser.driver.execute_script("window.scrollBy(0,200)")
sleep 0.05
end
您可以訪問底層驅動程序並執行一些 javascript。 例如,如果您想滾動到頁面底部,您將使用
@browser.driver.execute_script( "window.scrollBy(0,document.body.scrollHeight)" )
它在 y 軸上滾動到頁面底部。
有用
evaluate_script("document.getElementsByTagName('body')[0].scrollTop=0;")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.