2012-09-06 45 views

回答

78

對於向下滾動

WebDriver driver = new FirefoxDriver(); 
JavascriptExecutor jse = (JavascriptExecutor)driver; 
jse.executeScript("window.scrollBy(0,250)", ""); 

或者,你可以做如下:

jse.executeScript("scroll(0, 250);"); 

對於向上滾動

jse.executeScript("window.scrollBy(0,-250)", ""); 
OR, 
jse.executeScript("scroll(0, -250);"); 
+0

上述代碼用於向下滾動。向上滾動:jse.executeScript(「scroll(250,0)」);只有值會反轉 –

+8

否 - 它將滾動到右側。向上滾動將滾動(0,-250)' – Stephen

+0

謝謝斯蒂芬。滾動(250,0)和滾動(0,-250)都適用於向上滾動。 –

0

試試這個

 Actions dragger = new Actions(driver); 
     WebElement draggablePartOfScrollbar = driver.findElement(By.xpath("//*[@id='jobreslist_outercontainer']/div/div[2]/div")); 

     // drag downwards 
     int numberOfPixelsToDragTheScrollbarDown = 50; 
     for (int i=10;i<500;i=i+numberOfPixelsToDragTheScrollbarDown){ 
      try{ 
     // this causes a gradual drag of the scroll bar, 10 units at a time 
     dragger.moveToElement(draggablePartOfScrollbar).clickAndHold().moveByOffset(0,numberOfPixelsToDragTheScrollbarDown).release().perform(); 
     Thread.sleep(1000L); 
      }catch(Exception e1){} 
     } 

     // now drag opposite way (downwards) 
     numberOfPixelsToDragTheScrollbarDown = -50; 
     for (int i=500;i>10;i=i+numberOfPixelsToDragTheScrollbarDown){ 
     // this causes a gradual drag of the scroll bar, -10 units at a time 
     dragger.moveToElement(draggablePartOfScrollbar).clickAndHold().moveByOffset(0,numberOfPixelsToDragTheScrollbarDown).release().perform(); 
     Thread.sleep(1000L); 
     } 
+0

我其實很喜歡這個,因爲它會滾動用戶的方式 – KthProg

8

這可能不是您的問題的確切答案(根據WebDriver),但我發現java.awt庫比selenium.Keys更穩定。 所以,使用前一個頁面向下的動作將是:

Robot robot = new Robot(); 
robot.keyPress(KeyEvent.VK_PAGE_DOWN); 
robot.keyRelease(KeyEvent.VK_PAGE_DOWN); 
+0

我之前沒有使用Robot。但我可以嘗試使用。謝謝rs79 –

+1

不幸的是,上面的代碼不適合我 –

+0

你有沒有相關的Thread.sleep(xxx)命令? – rs79

8

有很多方法和向上滾動在硒的webdriver下來,我一直使用Java腳本做同樣的。

下面是如果我要向上或向下滾動

// This will scroll page 400 pixel vertical 
    ((JavascriptExecutor)driver).executeScript("scroll(0,400)"); 

你可以從這裏Scroll Page in Selenium

得到充分的代碼。如果你想爲一個單元,然後下面滾動,它總是對我的作品的代碼一段代碼將爲你工作。

je.executeScript("arguments[0].scrollIntoView(true);",element); 

你會得到完整的doc這裏Scroll for specific Element

+0

這工作,如果我不得不向下滾動。我怎樣才能向上滾動頁面? –

+0

代碼的第一個代碼段只滾動頁面,而不是元素本身,我該怎麼做? –

30

滾動到頁面的底部:

JavascriptExecutor js = ((JavascriptExecutor) driver); 
js.executeScript("window.scrollTo(0, document.body.scrollHeight)"); 
+1

只是提及,它是向下滾動 – Tarun

0

您應該添加滾動到頁面,選擇使用Selenium.executeScript("window.scrollBy(0,450)", "")所有元素。

如果您有一個大的列表,請在執行過程中多次添加滾動。請注意,滾動只能轉到頁面中的某個點,例如(0,450)。

0
JavascriptExecutor jse = ((JavascriptExecutor) driver); 
jse.executeScript("window.scrollTo(0, document.body.scrollHeight)"); 

此代碼適用於我。作爲我正在測試的頁面,在我們向下滾動時加載。

0

的Javascript執行一直做這項工作完美:

((JavascriptExecutor) driver).executeScript("scroll(0,300)"); 

其中(0,300)分別爲水平和垂直距離。按照您的要求放置您的距離。

如果您是完美主義者,想要獲得您想要在第一次嘗試時滾動的確切距離,請使用此工具,MeasureIt。這是一個非常棒的Firefox附加組件。

1

我不想使用JavaScript,或者任何外部庫,所以這是我的解決方案(C#):

IWebElement body = Driver.FindElement(By.TagName("body")); 

IAction scrollDown = new Actions(Driver) 
    .MoveToElement(body, body.Size.Width - 10, 15) // position mouse over scrollbar 
    .ClickAndHold() 
    .MoveByOffset(0, 50) // scroll down 
    .Release() 
    .Build(); 

scrollDown.Perform(); 

你也可以很容易地使這是一個擴展方法或任何元素上下滾動。

+1

此代碼將無法在無頭瀏覽器上工作 – raffamaiden

+0

@raffamaiden把頭放在您的瀏覽器大聲笑......我不知道爲什麼有人想測試瀏覽器,他們的用戶aren實際上不會使用 – KthProg

+0

你是對的。但OP沒有說明它正在測試一個應用程序。您也可以將Selenium用於其他目的(例如網頁瀏覽)。 – raffamaiden

2
JavascriptExecutor js = ((JavascriptExecutor) driver); 

向下滾動:

js.executeScript("window.scrollTo(0, document.body.scrollHeight);"); 

向上滾動:

js.executeScript("window.scrollTo(0, -document.body.scrollHeight);"); 
0

感謝里彭鋁瓦西姆的答案。我做了一些改進。由於網絡問題,我重試三次直到斷開循環。

driver.get(url) 
# Get scroll height 
last_height = driver.execute_script("return document.body.scrollHeight") 
try_times = 0 
while True: 
    # Scroll down to bottom 
    driver.execute_script("window.scrollBy(0,2000)") 

    # Wait to load page 
    time.sleep(scroll_delay) 
    # Calculate new scroll height and compare with last scroll height 
    new_height = driver.execute_script("return document.body.scrollHeight") 

    if last_height == new_height: 
     try_times += 1 

    if try_times > 3: 
     try_times = 0 
     break 
    last_height = new_height 
相關問題