From e76a364fe836a02244b0a446aeb631c161b78357 Mon Sep 17 00:00:00 2001 From: mauricemaina Date: Fri, 10 Oct 2025 16:31:00 +0300 Subject: [PATCH] BAEL-8376: How to Scroll an Element Into View in Selenium --- .../selenium-3/scrollelementintoview/pom.xml | 56 ++++++++++++++ .../ScrollElementIntoView.java | 74 +++++++++++++++++++ .../src/main/resources/form.html | 36 +++++++++ .../ScrollElementIntoViewUnitTest.java | 53 +++++++++++++ 4 files changed, 219 insertions(+) create mode 100644 testing-modules/selenium-3/scrollelementintoview/pom.xml create mode 100644 testing-modules/selenium-3/scrollelementintoview/src/main/java/com/baeldung/scrollelementintoview/ScrollElementIntoView.java create mode 100644 testing-modules/selenium-3/scrollelementintoview/src/main/resources/form.html create mode 100644 testing-modules/selenium-3/scrollelementintoview/src/test/java/com/baeldung/scrollelementintoview/ScrollElementIntoViewUnitTest.java diff --git a/testing-modules/selenium-3/scrollelementintoview/pom.xml b/testing-modules/selenium-3/scrollelementintoview/pom.xml new file mode 100644 index 000000000000..29ff08ecf9e4 --- /dev/null +++ b/testing-modules/selenium-3/scrollelementintoview/pom.xml @@ -0,0 +1,56 @@ + + 4.0.0 + com.baeldung.scrollelementintoview + scrollelementintoview + jar + 1.0-SNAPSHOT + scrollelementintoview + http://maven.apache.org + + + 17 + 17 + UTF-8 + + + + + + org.seleniumhq.selenium + selenium-java + 4.25.0 + + + + + org.junit.jupiter + junit-jupiter + 5.10.0 + test + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + 17 + 17 + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.2.5 + + + + diff --git a/testing-modules/selenium-3/scrollelementintoview/src/main/java/com/baeldung/scrollelementintoview/ScrollElementIntoView.java b/testing-modules/selenium-3/scrollelementintoview/src/main/java/com/baeldung/scrollelementintoview/ScrollElementIntoView.java new file mode 100644 index 000000000000..a290543ca22d --- /dev/null +++ b/testing-modules/selenium-3/scrollelementintoview/src/main/java/com/baeldung/scrollelementintoview/ScrollElementIntoView.java @@ -0,0 +1,74 @@ +package com.baeldung.scrollelementintoview; + +import org.openqa.selenium.*; +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.JavascriptExecutor; +import java.net.URL; + +public class ScrollElementIntoView { + + private WebDriver driver; + + public void setUp() { + driver = new ChromeDriver(); + driver.manage().window().maximize(); + + URL formUrl = getClass().getClassLoader().getResource("form.html"); + if (formUrl != null) { + driver.get(formUrl.toString()); + } else { + throw new RuntimeException("form.html not found in resources"); + } + } + + public void tearDown() { + if (driver != null) { + driver.quit(); + } + } + + public void scrollToElementCenter(WebElement element) { + JavascriptExecutor js = (JavascriptExecutor) driver; + js.executeScript( + "const rect = arguments[0].getBoundingClientRect();" + + "window.scrollBy({ top: rect.top + window.pageYOffset - (window.innerHeight / 2) + (rect.height / 2), behavior: 'smooth' });", + element + ); + } + + public void runDemo() throws InterruptedException { + WebElement firstName = driver.findElement(By.id("firstName")); + WebElement middleName = driver.findElement(By.id("middleName")); + WebElement lastName = driver.findElement(By.id("lastName")); + + scrollToElementCenter(firstName); + Thread.sleep(1000); + firstName.sendKeys("John"); + + scrollToElementCenter(middleName); + Thread.sleep(1000); + middleName.sendKeys("William"); + + scrollToElementCenter(lastName); + Thread.sleep(1000); + lastName.sendKeys("Doe"); + + Thread.sleep(2000); + } + + public WebDriver getDriver() { + return driver; + } + + public static void main(String[] args) { + ScrollElementIntoView demo = new ScrollElementIntoView(); + try { + demo.setUp(); + demo.runDemo(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + demo.tearDown(); + } + } +} diff --git a/testing-modules/selenium-3/scrollelementintoview/src/main/resources/form.html b/testing-modules/selenium-3/scrollelementintoview/src/main/resources/form.html new file mode 100644 index 000000000000..c7fe1e6dc0e2 --- /dev/null +++ b/testing-modules/selenium-3/scrollelementintoview/src/main/resources/form.html @@ -0,0 +1,36 @@ + + + + + Long Form Example + + + +
+

Long Form Example

+ + + + +
+ + + + +
+ + + + +
+ + +
+ + diff --git a/testing-modules/selenium-3/scrollelementintoview/src/test/java/com/baeldung/scrollelementintoview/ScrollElementIntoViewUnitTest.java b/testing-modules/selenium-3/scrollelementintoview/src/test/java/com/baeldung/scrollelementintoview/ScrollElementIntoViewUnitTest.java new file mode 100644 index 000000000000..4b9a9ee552cf --- /dev/null +++ b/testing-modules/selenium-3/scrollelementintoview/src/test/java/com/baeldung/scrollelementintoview/ScrollElementIntoViewUnitTest.java @@ -0,0 +1,53 @@ +package com.baeldung.scrollelementintoview; + +import org.junit.jupiter.api.*; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import static org.junit.jupiter.api.Assertions.assertEquals; + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +public class ScrollElementIntoViewUnitTest { + + private ScrollElementIntoView helper; + private WebDriver driver; + + @BeforeAll + void init() { + helper = new ScrollElementIntoView(); + helper.setUp(); + driver = helper.getDriver(); + } + + @AfterAll + void tearDown() { + helper.tearDown(); + } + + @Test + @DisplayName("Should scroll and fill First Name field") + void givenFirstNameField_whenScrolledIntoView_thenFieldIsFilled() { + WebElement firstName = driver.findElement(By.id("firstName")); + helper.scrollToElementCenter(firstName); + firstName.sendKeys("John"); + assertEquals("John", firstName.getAttribute("value")); + } + + @Test + @DisplayName("Should scroll and fill Middle Name field") + void givenMiddleNameField_whenScrolledIntoView_thenFieldIsFilled() { + WebElement middleName = driver.findElement(By.id("middleName")); + helper.scrollToElementCenter(middleName); + middleName.sendKeys("William"); + assertEquals("William", middleName.getAttribute("value")); + } + + @Test + @DisplayName("Should scroll and fill Last Name field") + void givenLastNameField_whenScrolledIntoView_thenFieldIsFilled() { + WebElement lastName = driver.findElement(By.id("lastName")); + helper.scrollToElementCenter(lastName); + lastName.sendKeys("Doe"); + assertEquals("Doe", lastName.getAttribute("value")); + } +}