Careeroza
When to Use JavaScriptExecutor
Good and Bad Uses
| Use it for | Avoid it for |
|---|---|
| scrolling, infinite scroll | normal clicks and typing (use WebDriver) |
| reading page state: readyState, localStorage | bypassing a popup that a user would see |
| setting up test state quickly (feature flags, clearing storage) | making a failing test "pass" |
| highlighting and debugging | replacing proper waits |
Decide Like a Reviewer
Example
A simple rule set a reviewer applies to every JavaScript call in a pull request:
import java.util.*;
public class Main {
static String review(String script) {
if (script.contains(".click()")) return "QUESTION: why not WebElement.click()? Is something covering it?";
if (script.contains(".value =")) return "OK only for setup; also fire an input/change event";
if (script.contains("scroll")) return "OK";
if (script.startsWith("return ")) return "OK: read-only";
return "REVIEW";
}
public static void main(String[] args) {
List<String> scripts = List.of(
"arguments[0].click();",
"window.scrollBy(0, 600);",
"return document.readyState;",
"arguments[0].value = '2026-10-28';");
for (String s : scripts) System.out.printf("%-36s -> %s%n", s, review(s));
}
}Output
arguments[0].click(); -> QUESTION: why not WebElement.click()? Is something covering it? window.scrollBy(0, 600); -> OK return document.readyState; -> OK: read-only arguments[0].value = '2026-10-28'; -> OK only for setup; also fire an input/change event