如何向下滚动页面直到所有视图出现?

时间:2017-06-05 01:49:29

标签: java selenium junit

在我的页面中,我有很多数据。第一次打开页面我只能看到数据。当我向下滚动页面时,其他数据开始出现。它反复发生。问题是我想在我的页面中查看所有数据并记下他们的名字但是当我使用List <WebElement> listItems=driver.findElement(AAA).findElements(BBB);这段代码时,我只能从第一页获取数据。我怎么能看到其他人? (我不想在底部使用id或类。并滚动直到看到它)

2 个答案:

答案 0 :(得分:2)

嗯,你肯定可以滚动到底部。最简单的方法是使用JavaScript查看滚动高度并滚动到它:

JavascriptExecutor jse = (JavascriptExecutor) driver;
Long scrollHeight = (Long) jse.executeScript("return document.scrollHeight;");
jse.ExecuteScript("document.scrollTop="+scrollHeight);

但是,这仅在页面已经具有正确高度的滚动条时才有效。如果它不能立即完全渲染,则滚动高度可能不正确。有一种方法可以解决这个问题,但我从来没有尝试使用页面,只有表格。

按PgDn按钮并检查scrollTop。你需要在每个PgDn之后等一下,因为渲染滚动可能需要一些时间,你需要scrollTop才能正确。只要前一个和当前的scrollTop相同,就完成了。

我没有亲自尝试过我在这里按PgDn的方法。我只是将它发送到body元素。另一种方法是使用Actions。

JavascriptExecutor jse = (JavascriptExecutor) driver;
WebElement body = driver.findElement(By.tagName("body"));
String prevTop ="-1";
boolean continueScrolling = false;
do {
    body.sendKeys(Keys.PAGE_DOWN);
    Thread.sleep(1000); // you might need to add handling for InterruptedException
    String currentTop = String.valueOf(jse.executeScript("return document.scrollTop;"));
    continueScrolling = !currentTop.equals(prevTop);
    prevTop = currentTop;
} while (continueScrolling);

答案 1 :(得分:0)

你可以执行这样的javascript代码:

WebElement element = driver.findElement(By.id("id_of_element"));
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", element);

//do anything you want with the element