【问题标题】:How to scroll to bottom of div element Selenium Webdriver如何滚动到 div 元素 Selenium Webdriver 的底部
【发布时间】:2026-01-04 21:10:01
【问题描述】:

我有一个用例,其中网页上有一个 div 元素,一旦您单击链接,它就会显示为弹出对话框(它不是实际的弹出窗口,它类似于当您单击 Facebook 时在 Facebook 中打开的对话框链接以检查您的帖子等的反应)

我使用 Selenium WebDriver 和 Java 来自动测试这个应用程序,我的用例涉及我滚动到对话框的底部,其中有一个显示更多项目的链接,当用户点击显示更多时,它会填充列表中的另外 10 个项目,依此类推,直到没有其他项目可供用户访问。

所以基本上我必须在那个特定的 div 元素上向下滚动,直到我一直看到 Show More 链接,并且当驱动程序无法找到显示更多链接时,它应该停止。

注意 - 我不能只使用 javascript window.scrollTo() 滚动到页面底部,因为它会向下滚动整个网页,但我只想滚动到该除法元素的底部。

如果有人对如何实现这一点有任何想法,请告诉我。

提前感谢您的帮助!

【问题讨论】:

  • 1.请为您的示例添加相关的 HTML。此外,您在代码中遇到的错误是什么也会有所帮助。

标签: javascript java selenium-webdriver automated-tests


【解决方案1】:

滚动到任何可滚动元素内部底部的另一种方式:

public void scrollToBottomInsideDiv(WebElement scrollArea) {
    JavascriptExecutor js = ((JavascriptExecutor) webdriver);
    js.executeScript("arguments[0].scrollTo(0, arguments[0].scrollHeight)", scrollArea);
}

【讨论】:

    【解决方案2】:
    WebElement ele= driver.findElement(By.id("id_of_element"));
    ((JavascriptExecutor)driver).executeScript("arguments[0].scrollIntoView();", ele);
    

    WebElement ele= driver.findElement(By.id("id_of_element"));
    Actions builder = new Actions(driver);
    builder.moveToElement(ele).click();
    Action build=builder.build();
    build.perform();
    

    【讨论】:

      【解决方案3】:

      我遇到过这种问题,我使用 SQA SO 上提出的类似问题解决了这个问题。这是post

      请参阅 Sagar007 的 last answer,它使用单独的函数 scroll_Page() 来实现此目的。

      代码直接取自他的回答

      某些 HTML 页面具有内部(自定义)滚动条。我们必须用一点不同的方式来处理。 Javascript 在这里不起作用。

      解决方案:

      WebElement scrollArea = 
      driver.findElement(By.cssSelector("div.slimScrollBar"));
      

      我添加了一个新步骤,在其中单击 div 元素,使用 click() 方法,然后继续下一步。

      如下所示创建方法scroll_Page。将此方法称为

       scroll_Page(scrollArea ,100);
      

      其中 scrollArea 是您拖动(滚动)的元素,100 是滚动点。

        public static boolean scroll_Page(WebElement webelement, int scrollPoints)
      {
      try
      {               
          Actions dragger = new Actions(driver);
          // drag downwards
          int numberOfPixelsToDragTheScrollbarDown = 10;
          for (int i = 10; i < scrollPoints; i = i + numberOfPixelsToDragTheScrollbarDown)
          {
              dragger.moveToElement(webelement).clickAndHold().moveByOffset(0, numberOfPixelsToDragTheScrollbarDown).release(webelement).build().perform();
          }
          Thread.sleep(500);
          return true;
      }
      catch (Exception e)
      {
          e.printStackTrace();
          return false;
      }
      

      【讨论】:

        【解决方案4】:

        使用scrollIntoView

        scrollIntoView vs moveToElement scrollIntoView vs moveToElement

        more items 链接元素作为参数传递。

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

        你也可以使用moveToElement

        Actions actions = new Actions(driver); actions.moveToElement(element); actions.perform();

        【讨论】:

          【解决方案5】:

          我在需要滚动的页面上有一个 div。此外,数据是动态加载的。该函数应该从while(someCondition()) 循环中调用。用过的Java

              private int scroll; 
              private void scrollDownPopup() {
                  scroll += 1000;
                  JavascriptExecutor jse = (JavascriptExecutor) browser;
                  // you can get query selector from inspector
                  jse.executeScript("document.querySelector('body > div.Blah.Blah1 > div > div.ClassOfYourDiv').scrollTo(0, "
                          + scroll + ");");
              }
          

          【讨论】:

            最近更新 更多