使用java在Selenium WebDriver(Selenium 2)中向上或向下滚动页面

我已经在Selenium 1(又名Selenium RC)中使用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);"); 

滚动到页面底部:

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

有很多方法可以在Selenium Webdriver中上下滚动,我总是使用Java Script来执行相同的操作。

如果我想向上或向下滚动,以下代码总是适用于我

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

您可以从这里获得完整的代码在Selenium中滚动页面

如果你想滚动一个元素,那么下面的一段代码将为你工作。

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

您将在这里得到完整的文档滚动特定元素

这可能不是一个确切的答案(就WebDriver而言),但是我发现java.awt库比selenium.Keys更稳定。 所以,使用前者的页面缩小操作将是:

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

尝试这个

  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); } 

你应该添加一个滚动页面来使用Selenium.executeScript("window.scrollBy(0,450)", "")select所有元素。

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

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

这段代码适用于我。 作为我正在testing的页面,当我们向下滚动时加载。

JavaScript的执行者总是完美的工作:

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

其中(0,300)分别是水平距离和垂直距离。 把你的距离按照你的要求。

如果你是一个完美主义者,并希望得到你想要第一次尝试的确切距离,使用这个工具MeasureIt 。 这是一个辉煌的Firefox附加。

我不想使用JavaScript或任何外部库,所以这是我的解决scheme(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(); 

你也可以很容易地使这个向上或向下滚动任何元素的扩展方法。

 JavascriptExecutor js = ((JavascriptExecutor) driver); 

向下滚动:

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

向上滑动:

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