What does arguments[0] and arguments[1] mean when using executeScript method from JavascriptExecutor interface through Selenium WebDriver?
The executeScript() method from the JavascriptExecutor Interface can invoke multiple arguments in the form of arguments[0], arguments[1], etc
-
As per your example, to
javaScriptExecutor.executeScript("arguments[0].click()", webElement);
to work you need to have the webElement defined.executeScript()
method will take the reference of the element as arguments[0] along with the method to be performed [in this caseclick()
] and the reference should be provided thereafter.WebElement webElement = driver.findElement(By.xpath("xpath_element")); JavascriptExecutor javaScriptExecutor = (JavascriptExecutor)driver; javaScriptExecutor.executeScript("arguments[0].click()", webElement);
-
Similarly, an example of
executeScript()
with multiple arguments[] is as follows :JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript("arguments[0].setAttribute('style', arguments[1])", driver.findElement(By.xpath("//input[@type='file']")), "0");
Here in this example :
-
driver.findElement(By.xpath("//input[@type='file']
is referred as arguments[0] - "0" is referred as arguments[1]
-
You can find a relevant discussion in What is arguments[0] while invoking execute_script() method through WebDriver instance through Selenium and Python?
For executeScript API: executeScript(script/function, arg1, arg2, arg3, ...)
The first argument is a javascript snippet or a javascript function, if it's a javascript snippet, it will be wrapper into an javascript function inside executeScript
.
The next arguments are the arguments for the javascript function represents the first argument.
arguments
is javascript function build-in feature. you can use it to get real passed-in arguments when call function. Please see below example:
test('tom', 12, 'male', '175cm') // call function: test
function test(name, age) {
console.log(name); // tom
console.log(age); // 12
console.log(arguments); // ['tom', 12, 'male', '175cm']
console.log(arguments[0]); // equal to argument: name, so print tom
console.log(arguments[1]); // equal to argument: age, so print 12
console.log(arguments[2]); // male
console.log(arguments[3]); // 175cm
}
More detail about Javascript Function.arguments
It appears to be running in the context of an anonymous function which is getting passed whatever driver.findElement(locator)
produces.
So, arguments[0]
is your way of accessing the first argument to the anonymous function and same for arguments[1]