JavaScript can be executed in Selenium WebDriver using the JavascriptExecutor interface. This interface provides methods to execute JavaScript code within the context of the current browser window. This is particularly useful when interacting with elements or performing actions that cannot be easily achieved using the standard WebDriver methods.
Following are some common use cases for using JavaScript in Selenium:
There can be a scenario where you need to make some changes on web page during runtime especially on element or data or run some script as prerequisite and this can be achieved by executing JavaScript code.
In the following example, we are enabling a radio button using JavaScript so that we can click on it.
Java
C#
Python
Javascript
Kotlin
WebDriver driver = new ChromeDriver();
driver.get("http://localhost:8080/demo/home/");
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(30));
driver.manage().window().maximize();
JavascriptExecutor je = (JavascriptExecutor) driver;
je.executeScript("window.scrollBy(10,500);");
driver.quit();
IWebDriver driver = new ChromeDriver();
driver.Url = "http://localhost:8080/demo/home/";
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);
driver.Manage().Window.Maximize();
IJavaScriptExecutor je = (IJavaScriptExecutor)driver;
je.ExecuteScript("window.scrollBy(10,500);");
driver.Quit();
driver = webdriver.Chrome()
driver.get("http://localhost:8080/demo/home/")
driver.implicitly_wait(30)
driver.maximize_window()
# Executes JavaScript in the context of the currently selected frame or window.
driver.execute_script("window.scrollBy(10,500)")
driver.quit()
let driver = await new Builder().forBrowser('chrome').build();
await driver.get("http://localhost:8080/demo/home/");
await driver.manage().setTimeouts({ implicit: 30000 });
await driver.manage().window().maximize();
// Executes JavaScript in the context of the currently selected frame or window.
await driver.executeScript("window.scrollBy(10,500)");
await driver.quit();
val driver: WebDriver = ChromeDriver()
driver["http://localhost:8080/demo/home/"]
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(30))
driver.manage().window().maximize()
val je = driver as JavascriptExecutor
je.executeScript("window.scrollBy(10,500);")
driver.quit()
Sometimes it will be difficult to interact with the element using the standard selenium commands. In such situations, we can use JavaScript executer to interact with the element especially clicking on it.
In the following example, JavaScript Executor allows you to click an element using JavaScript code. The arguments[0] is a reference to the first element passed to the executeScript method, in this case, the element WebElement variable.
Java
C#
Python
Javascript
Kotlin
WebDriver driver = new ChromeDriver();
driver.get("http://localhost:8080/demo/actions/");
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(30));
driver.manage().window().maximize();
WebElement action2Elem = driver.findElement(By.id("action2"));
JavascriptExecutor je = (JavascriptExecutor) driver;
je.executeScript("arguments[0].click();", action2Elem);
driver.quit();
IWebDriver driver = new ChromeDriver();
driver.Url = "http://localhost:8080/demo/actions/";
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);
driver.Manage().Window.Maximize();
IWebElement action2Elem = driver.FindElement(By.Id("action2"));
IJavaScriptExecutor je = (IJavaScriptExecutor)driver;
je.ExecuteScript("arguments[0].click();", action2Elem);
driver.Quit();
driver = webdriver.Chrome()
driver.get("http://localhost:8080/demo/actions/")
driver.implicitly_wait(30)
driver.maximize_window()
action2Elem = driver.find_element(By.ID, "action2")
driver.execute_script("arguments[0].click();", action2Elem)
driver.quit()
let driver = await new Builder().forBrowser('chrome').build();
await driver.get("http://localhost:8080/demo/actions/");
await driver.manage().setTimeouts({ implicit: 30000 });
await driver.manage().window().maximize();
let action2Elem = await driver.findElement(By.id("action2"));
await driver.executeScript("arguments[0].click();", action2Elem);
await driver.quit();
val driver: WebDriver = ChromeDriver()
driver["https://www.testautomationstudio.com/demo/actions/"]
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(30))
driver.manage().window().maximize()
val action2Elem = driver.findElement(By.id("action2"))
val je = driver as JavascriptExecutor
je.executeScript("arguments[0].click();", action2Elem)
driver.quit()
JavaScript code can be used to scroll to view elements on screen which are at the bottom of the page. In the following example we are scrolling to view the last element in the page.
Java
C#
Python
Javascript
Kotlin
WebDriver driver = new ChromeDriver();
driver.get("http://localhost:8080/demo/getData/");
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(30));
driver.manage().window().maximize();
WebElement newsLetterElem = driver.findElement(By.name("newsLetter"));
JavascriptExecutor je = (JavascriptExecutor) driver;
je.executeScript("arguments[0].scrollIntoView();", newsLetterElem);
driver.quit();
IWebDriver driver = new ChromeDriver();
driver.Url = "http://localhost:8080/demo/getData/";
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);
driver.Manage().Window.Maximize();
IWebElement newsLetterElem = driver.FindElement(By.Name("newsLetter"));
IJavaScriptExecutor je = (IJavaScriptExecutor)driver;
je.ExecuteScript("arguments[0].scrollIntoView();", newsLetterElem);
driver.Quit();
driver = webdriver.Chrome()
driver.get("http://localhost:8080/demo/getData/")
driver.implicitly_wait(30)
driver.maximize_window()
newsLetterElem = driver.find_element(By.NAME, "newsLetter")
driver.execute_script("arguments[0].scrollIntoView();", newsLetterElem)
driver.quit()
let driver = await new Builder().forBrowser('chrome').build();
await driver.get("http://localhost:8080/demo/get/");
await driver.manage().setTimeouts({ implicit: 30000 });
await driver.manage().window().maximize();
let newsLetterElem = await driver.findElement(By.name("newsLetter"));
await driver.executeScript("arguments[0].scrollIntoView();", newsLetterElem);
await driver.quit();
val driver: WebDriver = ChromeDriver()
driver["http://localhost:8080/demo/getData/"]
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(30))
driver.manage().window().maximize()
val newsLetterElem = driver.findElement(By.name("newsLetter"))
val je = driver as JavascriptExecutor
je.executeScript("arguments[0].scrollIntoView();", newsLetterElem)
driver.quit()
You can use retrieve or return the value of a text box or an innerText of an element by using JavaScript executor. In the following example value of a textbox element is returned using javascriptexecutor. The arguments[0] is a reference to the first element passed to the executeScript method, in this case, the element WebElement variable.
Java
C#
Python
Javascript
Kotlin
WebDriver driver = new ChromeDriver();
driver.get("http://localhost:8080/demo/validations/");
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(30));
driver.manage().window().maximize();
WebElement todaysDateElem = driver.findElement(By.id("todaysDate2"));
JavascriptExecutor je = (JavascriptExecutor) driver;
String todaysDate = (String) je.executeScript("return arguments[0].value;", todaysDateElem);
System.out.println(todaysDate);
driver.quit();
IWebDriver driver = new ChromeDriver();
driver.Url = "http://localhost:8080/demo/validations/";
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);
driver.Manage().Window.Maximize();
IWebElement todaysDateElem = driver.FindElement(By.Id("todaysDate2"));
IJavaScriptExecutor je = (IJavaScriptExecutor)driver;
String todaysDate = (String)je.ExecuteScript("return arguments[0].value;", todaysDateElem);
Console.WriteLine(todaysDate);
driver.Quit();
driver = webdriver.Chrome()
driver.get("http://localhost:8080/demo/validations/")
driver.implicitly_wait(30)
driver.maximize_window()
todaysDateElem = driver.find_element(By.NAME, "todaysDate2")
todaysDate = driver.execute_script("return arguments[0].value;", todaysDateElem)
print(todaysDate)
driver.quit()
let driver = await new Builder().forBrowser('chrome').build();
await driver.get("http://localhost:8080/demo/validations/");
await driver.manage().setTimeouts({ implicit: 30000 });
await driver.manage().window().maximize();
let todaysDateElem = driver.findElement(By.id("todaysDate2"));
let todaysDate = await driver.executeScript("return arguments[0].value;", todaysDateElem);
console.log("Todays Date:", todaysDate);
await driver.quit();
val driver: WebDriver = ChromeDriver()
driver["http://localhost:8080/demo/validations/"]
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(30))
driver.manage().window().maximize()
val todaysDateElem = driver.findElement(By.id("todaysDate2"))
val je = driver as JavascriptExecutor
val todaysDate = je.executeScript("return arguments[0].value;", todaysDateElem) as String
println(todaysDate)
driver.quit()