我正在尝试理解Selenium executeAsyncScript
此处(https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/JavascriptExecutor.html)的文档,例如在他们的第一个示例中:
long start = System.currentTimeMillis();
((JavascriptExecutor) driver).executeAsyncScript(
"window.setTimeout(arguments[arguments.length - 1], 500);");
System.out.println(
"Elapsed time: " + System.currentTimeMillis() - start);
据我所知,第一个参数应该是一个脚本,而最后一个是一个回调函数,但在这个例子中没有回调,所以这里发生了什么(arguments []为空右?)。
如果我想要一个返回承诺的函数,然后打印承诺,请说doSomething().then(function(result) { return result;)});
如何使用executeAsyncScript
函数?
由于
答案 0 :(得分:2)
您必须使用Selenium功能为您提供的回调。想象一下,当你使用 executeAsyncScript 时,脚本被包装在Selenium函数中,如下所示:
(function(args,,, callbackToServer){
window.setTimeout(arguments[arguments.length - 1], 500);
})(args,,, callbackToServer);
如您所见 arguments [arguments.length - 1] 实际引用 callbackToServer 函数。
例如,您的承诺将如下所示:
doSomething().then(function(result) {
arguments[arguments.length - 1](result);
)});