прокрутка вниз в селене, в то время как больше данных загружается - Ленивая загрузка - PullRequest
0 голосов
/ 14 сентября 2018

Привет! Я написал код для прокрутки вниз страницы, используя следующее:

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

Однако, он прокручивается только один раз, в то время как на мою страницу загружается больше данных. Данные заключены в тег div.

Когда он прокручивается вниз, страница показывает загрузку и загружает больше данных (отложенная загрузка). Как реализовать прокрутку для отложенной загрузки в нем?

1 Ответ

0 голосов
/ 14 сентября 2018

Вот пример того, как вы можете прокрутить, пока размер элементов данных не изменится. Чтобы загрузить loadLocator, откройте chrome devtools, прокрутите и нажмите F8, он приостановится, и вы сможете получить селектор.

WebDriverWait wait = new WebDriverWait(driver, 5);
JavascriptExecutor js = (JavascriptExecutor) driver;

int dataSize = driver.findElements(dataLocator).size();
while (true){
    js.executeScript("window.scrollTo(0, document.body.scrollHeight)");
    wait.ignoring(NoSuchElementException.class)
            .until(ExpectedConditions.invisibilityOfElementLocated(loadingLocator));

    if (driver.findElements(dataLocator).size()== dataSize)
        break;
    dataSize = driver.findElements(dataLocator).size();
}

Также вы можете реализовать собственное ожидание, как показано ниже:

By dataLocator = By.cssSelector(".save_ride_container");
WebDriverWait wait = new WebDriverWait(driver, 5, 500);
JavascriptExecutor js = (JavascriptExecutor) driver;

AtomicInteger dataSize = new AtomicInteger(driver.findElements(dataLocator).size());
boolean complete = false;
while (!complete){
    js.executeScript("window.scrollTo(0, document.body.scrollHeight)");
    complete = wait.ignoring(TimeoutException.class)
            .until(d -> {
                int size = driver.findElements(dataLocator).size();
                if (size== dataSize.get())
                    return true;
                dataSize.set(size);
                return false;
            });
}

List<WebElement> passengers = driver.findElements(dataLocator);
passengers.forEach(p -> System.out.println(p.findElement(By.xpath("./div[1]/div[3]/p[5]/strong"))));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...