页面滚动中硒的webdriver向上或向下用java

问题描述:

我已经使用Java编写的硒1(又名硒RC)的页面滚动下面的代码(硒2):页面滚动中硒的webdriver向上或向下用java

selenium.getEval("scrollBy(0, 250)"); 

什么是等价代码Selenium 2(WebDriver)?

对于向下滚动

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)都适用于向上滚动。 –

试试这个

 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

这可能不是您的问题的确切答案(根据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

有很多方法和向上滚动在硒的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

代码的第一个代码段只滚动页面,而不是元素本身,我该怎么做? –

滚动到页面的底部:

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

只是提及,它是向下滚动 – Tarun

您应该添加滚动到页面,选择使用Selenium.executeScript("window.scrollBy(0,450)", "")所有元素。

如果您有一个大的列表,请在执行过程中多次添加滚动。请注意,滚动只能转到页面中的某个点,例如(0,450)。

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

此代码适用于我。作为我正在测试的页面,在我们向下滚动时加载。

的Javascript执行一直做这项工作完美:

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

其中(0,300)分别为水平和垂直距离。按照您的要求放置您的距离。

如果您是完美主义者,想要获得您想要在第一次尝试时滚动的确切距离,请使用此工具,MeasureIt。这是一个非常棒的Firefox附加组件。

我不想使用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

JavascriptExecutor js = ((JavascriptExecutor) driver); 

向下滚动:

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

向上滚动:

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

感谢里彭铝瓦西姆的答案。我做了一些改进。由于网络问题,我重试三次直到断开循环。

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