sc

Нынче на сайтах модно стало делать списки, которые на лету подгружаются при прокрутке страницы вниз. Примеров тысячи, даже тот же самый twitter.  WebDriver, хоть и позиционирует себя как инструмент, максимально приближенный к функциональности простого пользователя, но прокручивать страницы не умеет, поэтому нам на помощь опять приходит старый добрый JS. Вот вполне себе рабочий пример кода, с помощью которого в нашем проекте страница прокручивается, до момента выгрузки полного списка результатов поиска:

  1. public void searchScroll() {
  2. try {
  3. int resultsCount = webDriver.findElements(bySearchResults).size();
  4. ((JavascriptExecutor) webDriver).executeScript("window.scrollTo(0,document.body.scrollHeight);");//scroll bottom
  5.  
  6. Wait<WebDriver> wait = new WebDriverWait(webDriver, 5);
  7. wait.until(isCountElementsMoreThen(resultsCount, bySearchResults));
  8. searchScroll();
  9. } catch (TimeoutException e) {
  10. System.out.println("Scrolling search end.");
  11. }
  12. }

4 строчка кода это выполнение на странице JS, который и прокручивает страницу. document.body.scrollHeight — максимальное возможная координата для прокручивания.
isCountElementsMoreThen — Ждёт, пока количество элементов станет больше чем resultsCount, что будет в нашем случае означать появление новых элементов поиска. Ну, а 8-я строчка — это классический рекурсивный вызов, выход из рекурсии будет в том случае, если wait.until(isCountElementsMoreThen(resultsCount, bySearchResults)); — выкинет исключение, так и не дождавшись увеличения количества элементов на странице, что будет означать полную выгрузку на страницу всех результатов поиска.

Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Яндекс