Javascript 了解Selenium中executeAsyncScript的用法
我试图理解Selenium的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(
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(结果);}”);”;