使用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);");