Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 了解Selenium中executeAsyncScript的用法_Javascript_Selenium - Fatal编程技术网

Javascript 了解Selenium中executeAsyncScript的用法

Javascript 了解Selenium中executeAsyncScript的用法,javascript,selenium,Javascript,Selenium,我试图理解Selenium的executeAsyncScripthere(),例如,在他们的第一个示例中,他们有: long start = System.currentTimeMillis(); ((JavascriptExecutor) driver).executeAsyncScript( "window.setTimeout(arguments[arguments.length - 1], 500);"); System.out.println(

我试图理解Selenium的
executeAsyncScript
here(),例如,在他们的第一个示例中,他们有:

  long start = System.currentTimeMillis();
   ((JavascriptExecutor) driver).executeAsyncScript(
       "window.setTimeout(arguments[arguments.length - 1], 500);");
   System.out.println(
       "Elapsed time: " + System.currentTimeMillis() - start);
现在据我所知,第一个参数应该是脚本,而最后一个参数是回调函数,但是在这个例子中没有回调,所以这里发生了什么(参数[]是空的,对吗?)

如果我想要一个返回承诺的函数,然后打印承诺,比如说
doSomething().then(function(result){returnresult;)})如何使用
executeAsyncScript
函数


谢谢

您必须使用Selenium函数提供的回调。想象一下,当您使用executeAsyncScript时,脚本被包装在Selenium函数中,如下所示:

(function(args,,, callbackToServer){
    window.setTimeout(arguments[arguments.length - 1], 500);
})(args,,, callbackToServer);
doSomething().then(function(result) { 
    arguments[arguments.length - 1](result);
)});
正如您所看到的,参数[arguments.length-1]实际上引用了callbackToServer函数

例如,您的承诺如下所示:

(function(args,,, callbackToServer){
    window.setTimeout(arguments[arguments.length - 1], 500);
})(args,,, callbackToServer);
doSomething().then(function(result) { 
    arguments[arguments.length - 1](result);
)});

您必须使用Selenium函数提供的回调。想象一下,当您使用executeAsyncScript时,脚本被包装在Selenium函数中,如下所示:

(function(args,,, callbackToServer){
    window.setTimeout(arguments[arguments.length - 1], 500);
})(args,,, callbackToServer);
doSomething().then(function(result) { 
    arguments[arguments.length - 1](result);
)});
正如您所看到的,参数[arguments.length-1]实际上引用了callbackToServer函数

例如,您的承诺如下所示:

(function(args,,, callbackToServer){
    window.setTimeout(arguments[arguments.length - 1], 500);
})(args,,, callbackToServer);
doSomething().then(function(result) { 
    arguments[arguments.length - 1](result);
)});

抱歉,您指的是什么Selenium函数?请参阅示例代码。第一行和第三行是selenium函数实现的功能。第二行是你注入的。你能回答我问题的第二部分吗?恐怕我非常困惑。我更新了你的承诺示例。显然,您必须跟踪服务器回调。可能将其设置为变量。例如((JavascriptExecutor)driver).executeAsyncScript(“var callback=arguments[arguments.length-1];doSomething().then(函数(结果){callback(结果);}”);”;抱歉,您指的是什么Selenium函数?请参阅示例代码。第一行和第三行是selenium函数实现的功能。第二行是你注入的。你能回答我问题的第二部分吗?恐怕我非常困惑。我更新了你的承诺示例。显然,您必须跟踪服务器回调。可能将其设置为变量。例如((JavascriptExecutor)driver).executeAsyncScript(“var callback=arguments[arguments.length-1];doSomething().then(函数(结果){callback(结果);}”);”;