What does arguments[0]
and arguments[1]
mean when using executeScript()
method from JavascriptExecutor inter
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
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 case click()
] 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]You can find a relevant discussion in What is arguments[0] while invoking execute_script() method through WebDriver instance through Selenium and Python?
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]