Intermediate
Chapter 12 · 10 min read
JavaScript Executor
Execute JavaScript in the browser context — scroll, manipulate DOM, handle hidden elements, extract data, and trigger events.
JavaScript Executor
Sometimes Selenium's built-in methods aren't enough. JavaScriptExecutor lets you run arbitrary JavaScript in the browser — scrolling, modifying DOM, clicking hidden elements, extracting computed styles, and more.
JavaScriptExecutorTest.java
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import org.testng.annotations.*;
import java.time.Duration;
public class JavaScriptExecutorTest {
WebDriver driver;
JavascriptExecutor js;
@BeforeMethod
public void setup() {
driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
js = (JavascriptExecutor) driver;
}
@Test
public void testScrollDown() {
driver.get("https://www.selenium.dev/");
// Scroll to bottom of page
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");
// Scroll by pixels
js.executeScript("window.scrollBy(0, 500)");
// Scroll element into view
WebElement footer = driver.findElement(By.tagName("footer"));
js.executeScript("arguments[0].scrollIntoView(true);", footer);
}
@Test
public void testClickHiddenElement() {
driver.get("https://www.selenium.dev/selenium/web/web-form.html");
WebElement element = driver.findElement(By.name("my-text"));
// JS click bypasses visibility checks
js.executeScript("arguments[0].click();", element);
}
@Test
public void testGetPageInfo() {
driver.get("https://www.selenium.dev/");
String title = (String) js.executeScript("return document.title;");
Long height = (Long) js.executeScript(
"return document.body.scrollHeight;");
String readyState = (String) js.executeScript(
"return document.readyState;");
System.out.println("Title: " + title);
System.out.println("Page height: " + height);
System.out.println("Ready state: " + readyState);
Assert.assertEquals(readyState, "complete");
}
@Test
public void testModifyDOM() {
driver.get("https://www.selenium.dev/selenium/web/web-form.html");
// Change element style
WebElement input = driver.findElement(By.name("my-text"));
js.executeScript(
"arguments[0].style.border='3px solid red';", input);
// Set value directly
js.executeScript(
"arguments[0].value='Set via JavaScript';", input);
// Add text to page
js.executeScript(
"document.body.insertAdjacentHTML('beforeend', "
+ "'<p id="js-added">Added by JS</p>');");
WebElement added = driver.findElement(By.id("js-added"));
Assert.assertEquals(added.getText(), "Added by JS");
}
@Test
public void testWaitForPageLoad() {
driver.get("https://www.selenium.dev/");
// Wait for jQuery (if present)
// js.executeScript("return jQuery.active == 0");
// Wait for document ready
js.executeScript(
"return document.readyState === 'complete'");
}
@AfterMethod
public void teardown() { if (driver != null) driver.quit(); }
}
test_javascript_executor.py
from selenium import webdriver
from selenium.webdriver.common.by import By
import pytest
@pytest.fixture
def driver():
d = webdriver.Chrome()
d.implicitly_wait(10)
yield d
d.quit()
def test_scroll_down(driver):
driver.get("https://www.selenium.dev/")
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
driver.execute_script("window.scrollBy(0, 500)")
footer = driver.find_element(By.TAG_NAME, "footer")
driver.execute_script("arguments[0].scrollIntoView(true);", footer)
def test_click_hidden_element(driver):
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
element = driver.find_element(By.NAME, "my-text")
driver.execute_script("arguments[0].click();", element)
def test_get_page_info(driver):
driver.get("https://www.selenium.dev/")
title = driver.execute_script("return document.title;")
height = driver.execute_script("return document.body.scrollHeight;")
state = driver.execute_script("return document.readyState;")
print(f"Title: {title}, Height: {height}, State: {state}")
assert state == "complete"
def test_modify_dom(driver):
driver.get("https://www.selenium.dev/selenium/web/web-form.html")
input_el = driver.find_element(By.NAME, "my-text")
driver.execute_script(
"arguments[0].style.border='3px solid red';", input_el)
driver.execute_script(
"arguments[0].value='Set via JavaScript';", input_el)
driver.execute_script(
"""document.body.insertAdjacentHTML('beforeend',
'<p id="js-added">Added by JS</p>');"""
)
added = driver.find_element(By.ID, "js-added")
assert added.text == "Added by JS"
Selenium
Intermediate
JavaScript Executor
Written by PV
© 2026 All Rights Reserved