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


Answers:


113

场景/测试步骤:
1.打开浏览器并导航到TestURL
2.向下滚动一些像素并向上滚动

对于向下滚动

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

滚动到页面底部:

场景/测试步骤:
1.打开浏览器并导航到TestURL
2.滚动到页面底部

方法1:通过使用JavaScriptExecutor

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

方法2:按Ctrl + End

driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL, Keys.END);

方法3:通过使用Java Robot类

Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_END);
robot.keyRelease(KeyEvent.VK_END);
robot.keyRelease(KeyEvent.VK_CONTROL);

上面的代码用于向下滚动。对于向上滚动:jse.executeScript(“ scroll(250,0)”); 只有值会相反
Ripon Al Wasim 2013年

12
否-它将滚动到右侧。向上滚动将是scroll(0,-250)
2014年

谢谢斯蒂芬。scroll(250,0)和scroll(0,-250)都可以向上滚动。
Ripon Al Wasim 2014年

3
向上滚动(0,-250)是合乎逻辑的。我同意斯蒂芬。
Ripon Al Wasim 2015年

jse.executeScript(“ window.scrollBy(0,250)”,“”); 它工作正常。我想使用变量int y = 250; jse.executeScript(“ window.scrollBy(0,y)”,“”); 在这种情况下,错误显示为“未定义y”。在这种情况下如何使用变量?
Ripon Al Wasim

42

滚动到页面底部:

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

1
提一下,它是向下滚动的
Tarun

它在我的salesforce应用程序中不起作用,因为window.scrollBy(0,250)可以在其中运行。但是它不会滚动到页面的末尾。
Ashok kumar Ganesan

15

在Selenium Webdriver中有很多向上和向下滚动的方法,我总是使用Java Script来完成同样的操作。

以下是我向上或向下滚动时始终适用的代码

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

您可以从此处获取完整的代码硒中的滚动页面

如果要滚动查找某个元素,则下面的代码将为您工作。

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

您将在此处获得完整文档特定元素的滚动


如果我必须向下滚动,此方法有效。如何向上滚动页面?
RV_Dev

第一个代码片段仅滚动页面,而不滚动元素本身,我该怎么做?
哈维·林

11

这可能不是对您的问题的确切答案(就WebDriver而言),但是我发现该java.awt库比更加稳定selenium.Keys。因此,使用前者的向下翻页操作将是:

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

我以前没有使用过机器人。但是我可以尝试使用。感谢rs79
Ripon Al Wasim

为我工作,没有睡觉
tomsv

3
JavascriptExecutor js = ((JavascriptExecutor) driver);

向下滚动:

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

向上滚动:

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

2

尝试这个

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

1
我实际上很喜欢,因为它可以滚动显示用户的状态
KthProg'1

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

您也可以轻松地将此方法扩展为用于上下滚动任何元素的扩展方法。


@raffamaiden直指您的浏览器,大声笑...我不确定为什么有人会针对该浏览器测试他们的用户实际上并不会使用它
KthProg

你是对的。但是OP没有指定正在测试一个应用程序。您也可以将Selenium用于其他目的(例如,网络抓取)。
raffaem

好点的先生。我没有想到这种用例。
KthProg

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附加组件。


0

感谢Ripon Al Wasim的回答。我做了一些改进。由于网络问题,我重试了3次,直到出现中断循环。

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

0

1.要将页面滚动到底部,请使用window.scrollTo(0,document.body.scrollHeight)作为参数

//导航到底部的代码

WebDriver driver = new ChromeDriver();
JavascriptExecutor jsExecuter = (JavascriptExecutor)driver;
jsExecuter.executeScript(window.scrollTo(0,document.body.scrollHeight));

2.要将页面滚动到顶部,请使用window.scrollTo(0,document.body.scrollTop)作为参数

//导航到顶部的代码

WebDriver driver = new ChromeDriver();
JavascriptExecutor jsExecuter = (JavascriptExecutor)driver;
jsExecuter.executeScript(window.scrollTo(0,document.body.scrollTop));

3.要将页面滚动到“左”,请使用window.scrollTo(0,document.body.scrollLeft)作为参数

//向左导航的代码

WebDriver driver = new ChromeDriver();
JavascriptExecutor jsExecuter = (JavascriptExecutor)driver;
jsExecuter.executeScript(window.scrollTo(0,document.body.scrollLeft));

4.滚动到某点窗口.scrollTo(0,500)作为参数

//导航到特定点的代码,例如500作为此处的值传递

WebDriver driver = new ChromeDriver();
JavascriptExecutor jsExecuter = (JavascriptExecutor)driver;
jsExecuter.executeScript(window.scrollTo(0,500));

要直接在浏览器中检查导航,请在浏览器中打开开发人员工具,然后导航至控制台。在控制台窗口上执行命令.scrollTo(0,400) 在此处输入图片说明


0

JavascriptExecutor最好向下滚动网页 window.scrollToJavascriptExecutor中的函数可以做到这一点

JavascriptExecutor js = ((JavascriptExecutor) driver);
js.executeScript("window.scrollTo(0,100"); 

上面的代码将向下滚动100 y坐标


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

-1
  1. 如果要垂直滚动页面以执行某些操作,则可以使用以下JavaScript进行操作。 (((JavascriptExecutor)driver).executeScript(“ window.scrollTo(0,document.body.scrollHeight)”));;

        Where ‘JavascriptExecutor’ is an interface, which helps executing JavaScript through Selenium WebDriver. You can use the following code to import.
    

导入org.openqa.selenium.JavascriptExecutor;

2.如果要滚动到特定元素,则需要使用以下JavaScript。

WebElement元素= driver.findElement(By.xpath(“ // input [@ id ='email']””));((JavascriptExecutor)driver).executeScript(“ arguments [0] .scrollIntoView();”,元素) ;

其中“元素”是您要滚动的定位器。

3.如果要在特定坐标处滚动,请使用以下JavaScript。
(((JavascriptExecutor)driver).executeScript(“ window.scrollBy(200,300)”);; 其中“ 200,300”是坐标。

4.如果要垂直向上滚动,可以使用以下JavaScript。 (((JavascriptExecutor)驱动程序).executeScript(“ window.scrollTo(document.body.scrollHeight,0)”));

  1. 如果要沿正确的方向水平滚动,请使用以下JavaScript。 (((JavascriptExecutor)driver).executeScript(“ window.scrollBy(2000,0)”);;

  2. 如果要向左水平滚动,请使用以下JavaScript。 (((JavascriptExecutor)driver).executeScript(“ window.scrollBy(-2000,0)”));

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.