What does arguments[0] and arguments[1] mean when using executeScript method from JavascriptExecutor interface through Selenium WebDriver?

27,724

Solution 1

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]
    • "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?

Solution 2

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

Solution 3

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]

Share:
27,724
Vel Guru
Author by

Vel Guru

BY DAY: Quality Test engineer specialized in java and on both manual testing & Automation Testing BY NIGHT: Web page designer and Book reader FOR FUN: Casual tennis player and good skier, I like wandering in wild environment and discovering the world.

Updated on August 01, 2022

Comments

  • Vel Guru
    Vel Guru almost 2 years

    What does arguments[0] and arguments[1] mean when using executeScript() method from JavascriptExecutor interface through Selenium WebDriver and what is the purpose of the arguments[0] in the below code.

    javaScriptExecutor.executeScript("arguments[0].click()", webElement);
    
  • hipokito
    hipokito about 3 years
    Finally, an answer that answers the question - javaScriptExecutor.executeScript("arguments[0].click()", webElement); - arguments[0] in this case is webElement.