了解Selenium中executeAsyncScript的用法

时间:2017-12-20 23:07:18

标签: javascript selenium

我正在尝试理解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函数?

由于

1 个答案:

答案 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);
)});