Scrolling with JavaScript

Introduction

Many web pages contain content that extends beyond the visible browser window. To interact with elements located further down the page, Selenium often needs to scroll.

Although Selenium provides several ways to bring elements into view, JavaScript Executor offers a fast and reliable method for scrolling the page. It is especially useful for pages that implement infinite scrolling, lazy loading, or dynamically loaded content.

In this tutorial, you’ll learn how to scroll webpages using JavaScript Executor in Selenium with Python, along with practical examples, real-world scenarios, common mistakes, and best practices.


Why Scroll a Webpage?

Scrolling is commonly required when:

  • Elements are outside the visible area.

  • Infinite scrolling loads additional content.

  • Lazy-loaded elements appear only after scrolling.

  • Large forms extend beyond the viewport.

  • Modern web applications dynamically load data.


How JavaScript Scrolls a Page

JavaScript can move the browser window using:

window.scrollTo(0, document.body.scrollHeight);

This scrolls the page to the very bottom.


Example

from selenium import webdriver
from selenium.webdriver.common.by import By


# Topic: 32. JavaScript Executor - Scrolling with JavaScript
# Practice site: https://the-internet.herokuapp.com/infinite_scroll
# Run: pytest -s 32_examples/test_04_scrolling_with_javascript.py
#
# JavaScript scrolling is useful when elements are outside the viewport or when
# testing pages that load content while scrolling.


def test_scroll_page_with_javascript:
    driver = webdriver.Chrome()

    try:
        driver.get("https://the-internet.herokuapp.com/infinite_scroll")

        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        scroll_position = driver.execute_script("return window.pageYOffset;")

        assert scroll_position > 0
        assert driver.find_element(By.TAG_NAME, "body").is_displayed()
    finally:
        driver.quit()

Understanding the Code

Import Required Libraries

from selenium import webdriver
from selenium.webdriver.common.by import By

These modules are required to launch the browser and locate web elements.


Create a Chrome Browser Instance

driver = webdriver.Chrome()

Starts a new Chrome browser session.


Open the Practice Website

driver.get("https://the-internet.herokuapp.com/infinite_scroll")

Navigates to the Infinite Scroll practice page.


Scroll to the Bottom of the Page

driver.execute_script(
    "window.scrollTo(0, document.body.scrollHeight);"
)

Executes JavaScript to scroll from the top of the page to the bottom.

This is commonly used on pages that load additional content while scrolling.


Retrieve the Scroll Position

scroll_position = driver.execute_script(
    "return window.pageYOffset;"
)

Returns the current vertical scroll position of the browser window.

If the page has scrolled successfully, the returned value will be greater than zero.


Verify the Scroll

assert scroll_position > 0

Verifies that the browser has moved down the page.

A value greater than zero confirms that scrolling occurred.


Verify the Page is Still Displayed

assert driver.find_element(
    By.TAG_NAME,
    "body"
).is_displayed()

Checks that the webpage remains visible after scrolling.


Close the Browser

driver.quit()

Closes the browser and ends the WebDriver session.


Practical Example

Suppose an e-commerce website loads additional products as customers scroll.

The automation script:

  • Opens the product listing page.

  • Scrolls to the bottom.

  • Loads more products.

  • Verifies that additional content appears.


Automation Testing Example

Consider a social media platform.

As users scroll through the feed, more posts are loaded automatically.

The automation script:

  • Opens the news feed.

  • Scrolls down using JavaScript.

  • Verifies that new posts are displayed.


Real-World Example

JavaScript scrolling is commonly used in:

  • E-commerce websites

  • Social media platforms

  • News websites

  • Infinite scrolling pages

  • Enterprise dashboards

  • Analytics applications

  • Single Page Applications (SPA)

Examples include product listings, activity feeds, comments, reports, dashboards, and search results.


Advantages of JavaScript Scrolling

  • Scrolls quickly and reliably.

  • Works with dynamically loaded pages.

  • Supports infinite scrolling.

  • Helps access off-screen elements.

  • Useful for modern web applications.


Common Mistakes Beginners Make

Forgetting to Scroll Before Locating an Element

Some elements are not available until they enter the viewport or are loaded after scrolling.


Using Fixed Sleep Statements

Avoid:

time.sleep(5)

Instead, use Explicit Waits when scrolling loads additional content.


Assuming One Scroll is Always Enough

Some pages require multiple scroll operations before all content is loaded.


Not Verifying the Scroll

Always confirm that the page has actually scrolled by checking the scroll position or verifying newly loaded content.


Best Practices

  • Use JavaScript scrolling for long or dynamic pages.

  • Combine scrolling with Explicit Waits when content loads dynamically.

  • Verify the scroll position after scrolling.

  • Keep JavaScript snippets simple and readable.

  • Use standard Selenium methods when scrolling is unnecessary.


Conclusion

JavaScript Executor provides an efficient way to scroll webpages in Selenium. It is especially useful for infinite scrolling pages, lazy-loaded content, and modern web applications where elements appear only after scrolling. Understanding JavaScript scrolling helps create reliable automation scripts for complex web interfaces.


Frequently Asked Questions (FAQs)

Why use JavaScript for scrolling?

JavaScript provides a reliable way to move the browser viewport, especially on pages with dynamic or infinite scrolling.


What does window.scrollTo() do?

It scrolls the browser window to the specified coordinates.

For example:

window.scrollTo(0, document.body.scrollHeight);

scrolls to the bottom of the page.


What does window.pageYOffset return?

It returns the current vertical scroll position of the webpage.


When is JavaScript scrolling commonly used?

It is commonly used for infinite scrolling pages, lazy-loaded content, product listings, dashboards, news feeds, and Single Page Applications.


Should JavaScript scrolling replace Selenium scrolling methods?

Not necessarily.

Use JavaScript scrolling when it better suits the application’s behavior or when standard Selenium interactions are insufficient.


Key Takeaways

  • JavaScript Executor can scroll webpages efficiently.

  • window.scrollTo() scrolls to specific positions.

  • window.pageYOffset returns the current scroll position.

  • JavaScript scrolling is useful for infinite scrolling and lazy-loaded pages.

  • Combine scrolling with Explicit Waits when dynamic content loads.

  • JavaScript scrolling is an essential technique for automating modern web applications.