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"));
+ }
+}