通过 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);
工作,您需要定义 webElement。 executeScript()
方法将元素的引用作为 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 中的 webdriver 传递用户代理
如何在 Selenium WebDriver Java 中使用 JavaScript