【问题标题】:What does arguments[0] and arguments[1] mean when using executeScript method from JavascriptExecutor interface through Selenium WebDriver?通过 Selenium WebDriver 从 JavascriptExecutor 接口使用 executeScript 方法时,arguments[0] 和 arguments[1] 是什么意思?
【发布时间】:2018-09-27 00:38:31
【问题描述】:

通过 Selenium WebDriver 使用 JavascriptExecutor 接口中的 executeScript() 方法时,arguments[0]arguments[1] 是什么意思?下面的代码。

javaScriptExecutor.executeScript("arguments[0].click()", webElement);

【问题讨论】:

    标签: javascript java selenium selenium-webdriver webdriver


    【解决方案1】:

    来自JavascriptExecutor 接口的executeScript() 方法可以调用arguments[0]arguments[1] 等形式的多个参数

    • 根据您的示例,要让javaScriptExecutor.executeScript("arguments[0].click()", webElement); 工作,您需要定义 webElementexecuteScript() 方法将元素的引用作为 arguments[0] 以及 method已执行 [在这种情况下为 click()],此后应提供参考。

      WebElement webElement = driver.findElement(By.xpath("xpath_element"));
      JavascriptExecutor javaScriptExecutor = (JavascriptExecutor)driver;
      javaScriptExecutor.executeScript("arguments[0].click()", webElement);
      
    • 类似地,executeScript() 有多个 arguments[] 的例子如下:

      JavascriptExecutor js = (JavascriptExecutor) driver; 
      js.executeScript("arguments[0].setAttribute('style', arguments[1])", driver.findElement(By.xpath("//input[@type='file']")), "0");
      

      在这个例子中:

      • driver.findElement(By.xpath("//input[@type='file'] 被称为 arguments[0]
      • “0”被称为arguments[1]

    您可以在What is arguments[0] while invoking execute_script() method through WebDriver instance through Selenium and Python?找到相关讨论

    【讨论】:

    • 最后一个回答问题的答案——javaScriptExecutor.executeScript("arguments[0].click()", webElement); - arguments[0] 在这种情况下是 webElement
    【解决方案2】:

    对于 executeScript API:executeScript(script/function, arg1, arg2, arg3, ...)

    第一个参数是javascript sn-p或javascript函数,如果是javascript sn-p,它将被包装到executeScript内的javascript函数中。

    下一个参数是 javascript 函数的参数,代表第一个参数。

    arguments 是 javascript 函数内置功能。您可以在调用函数时使用它来获取真正的传入参数。请看下面的例子:

    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
    }
    

    更多关于 Javascript 的细节Function.arguments

    【讨论】:

      【解决方案3】:

      它似乎是在一个匿名函数的上下文中运行的,无论driver.findElement(locator) 产生什么,它都会被传递。

      所以,arguments[0] 是您访问匿名函数第一个参数的方式,arguments[1] 也是如此

      【讨论】:

        【解决方案4】:

        这是一个使用 arguments[0] 和 arguments[2] 的工作示例:

        objIE.ExecuteScript "arguments[0].value = arguments[1]", Array(objIE.FindElementById("sqlvalue1"), Sheets("SheetName").Range("U2").Value)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-07-13
          • 1970-01-01
          • 1970-01-01
          • 2016-11-26
          • 1970-01-01
          • 1970-01-01
          • 2019-02-15
          • 1970-01-01
          相关资源
          最近更新 更多