如何滚动到div元素Selenium Webdriver的底部

时间:2017-07-04 12:15:52

标签: javascript java selenium-webdriver automated-tests

我有一个用例,其中网页上有一个div元素,一旦你点击一个链接就会出现一个弹出对话框(它不是一个真正的弹出窗口,就像点击一个对话框一样在Facebook上打开链接以查看您帖子上的反应等。)

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

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

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

如果有人知道如何实现这一点,请告诉我。

提前感谢您的帮助!

5 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

直接从他的回答中获取的代码

  

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

     

解决方案:

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

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

  

创建方法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;
}

答案 2 :(得分:0)

使用scrollIntoView

scrollIntoView vs moveToElement scrollIntoView vs moveToElement

more items link元素作为参数传递。

((JavascriptExecutor)驱动程序).executeScript(&#34; arguments [0] .scrollIntoView(true);&#34;,element);

您也可以使用moveToElement

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

我在需要滚动的页面上有一个 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 + ");");
    }
相关问题