通过 Selenium WebDriver 从 JavascriptExecutor 接口使用 executeScript 方法时,arguments[0] 和 arguments[1] 是啥意思?

Posted

技术标签:

【中文标题】通过 Selenium WebDriver 从 JavascriptExecutor 接口使用 executeScript 方法时,arguments[0] 和 arguments[1] 是啥意思?【英文标题】: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);

【问题讨论】:

【参考方案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)

【讨论】:

以上是关于通过 Selenium WebDriver 从 JavascriptExecutor 接口使用 executeScript 方法时,arguments[0] 和 arguments[1] 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

selenium - webdriver 下拉框处理select

软件测试之Selenium Java WebDriver

通过 Selenium 中的 webdriver 传递用户代理

如何在 Selenium WebDriver Java 中使用 JavaScript

使用 Selenium WebDriver for Firefox 下载 pdf

如何告诉JAVA Selenium WebDriver从html中找到text-element