76

我在 Selenium 1(又名 Selenium RC)中编写了以下代码,用于使用 java 进行页面滚动:

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

Selenium 2(WebDriver)中的等效代码是什么?

4

16 回答 16

121

场景/测试步骤:
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);
于 2012-09-06T04:59:34.023 回答
43

滚动到页面底部:

JavascriptExecutor js = ((JavascriptExecutor) driver);
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");
于 2015-06-20T17:33:28.163 回答
15

在 Selenium Webdriver 中有很多上下滚动的方法,我总是使用 Java Script 来做同样的事情。

如果我想向上或向下滚动,下面是总是对我有用的代码

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

您可以从此处获取完整代码Scroll Page in Selenium

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

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

您将在此处获得完整文档Scroll for specific Element

于 2015-06-10T20:15:20.943 回答
11

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

Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_PAGE_DOWN);
robot.keyRelease(KeyEvent.VK_PAGE_DOWN);
于 2015-06-04T17:26:10.130 回答
4
JavascriptExecutor js = ((JavascriptExecutor) driver);

向下滚动:

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

向上滚动:

js.executeScript("window.scrollTo(0, -document.body.scrollHeight);");
于 2017-07-28T09:01:50.803 回答
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 += 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 += 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);
}
        
于 2013-06-27T02:23:08.973 回答
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();

您还可以轻松地将其用作在任何元素上向上或向下滚动的扩展方法。

于 2017-01-19T18:24:18.420 回答
1

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.滚动到某个点 window.scrollTo(0,500) 作为参数

//导航到某个点的代码,例如500在这里作为值传递

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

要直接在浏览器中检查导航,请在浏览器中打开开发人员工具并导航到控制台。在控制台 window.scrollTo(0,400) 上执行命令 在此处输入图像描述

于 2020-03-08T06:42:39.667 回答
1

Javascript

我们可以滚动到特定元素:

const element = await driver.findElement(...)
await driver.executeScript("arguments[0].scrollIntoView(true);", element)
await driver.sleep(500);
于 2021-07-14T05:10:55.520 回答
0

您应该向页面添加滚动以使用以下方法选择所有元素:

Selenium.executeScript("window.scrollBy(0,450)", "");

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

于 2016-08-24T16:39:31.027 回答
0
JavascriptExecutor jse = ((JavascriptExecutor) driver);
jse.executeScript("window.scrollTo(0, document.body.scrollHeight)");

这段代码对我有用。作为我正在测试的页面,在我们向下滚动时加载。

于 2016-11-03T09:11:12.670 回答
0

Javascript 执行器总是完美地完成工作:

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

分别(0,300)是水平距离和垂直距离。根据您的要求放置距离。

如果您是完美主义者,并且希望在第一次尝试时获得您想要向上滚动的确切距离,请使用此工具MeasureIt。这是一个出色的 Firefox 插件。

于 2016-11-10T12:29:47.510 回答
0

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

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
于 2018-03-06T10:55:51.250 回答
0

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

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

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

于 2020-08-11T12:34:41.093 回答
0
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.scrollBy(0,250)");
于 2020-09-14T00:18:33.883 回答
-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 element = driver.findElement(By.xpath(“//input [@id='email']”));((JavascriptExecutor) driver).executeScript(“arguments[0].scrollIntoView();”, element) ;

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

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

于 2018-10-05T06:52:21.210 回答