JavascriptExecutor语法错误:意外的标识符。为什么?

问题描述 投票:0回答:1

Java的

JavascriptExecutor js = (JavascriptExecutor) driver;
Boolean ready = (Boolean)js.executeScript("the below JavaScript");

JavaScript的

var ready = false;
window.onload = function() {
    ready = true;
}
window.sleep = function() {
    return new Promise(resolve => setTimeout(resolve, 2000));
}
for(var i = 0; i < 30; i++) {
    if(ready) {
           return true;
    }
    await sleep();
 }
 return false;

更新:很抱歉在我的岗位上一语法错误“功能”。这是一个错字不是在我的实际代码。所有的语法错误应该走了,但我仍然得到“语法错误:意外的标识符”。

这段代码是试图做的是等待的最大时间量要加载的页面。我通常返回document.readyState以检查条件,但在特殊情况Chrome会突然停止加载页面和document.readyState挂起5+分钟。这是杀害我的代码,所以我试图开发单线程代码来样模仿一个典型的多线程程序。

由于JavaScript是单线程的(像JavaScript的一个很酷的语言这样一个令人失望的),我们必须勇于创新。

如果你有return true;console.log('true');return false;取代console.log('false');所以我看不出是什么问题,该代码在浏览器控制台。

javascript java selenium browser-automation javascript-injection
1个回答
1
投票

事实上,有在JavaScript代码中的一些错误。

第一个错误是,在第三行window.sleep = funtion() { return new Promise(resolve => setTimeout(resolve, 2000)); },该function拼写是错误的。

第二个错误是当出现在函数定义没有await你不应该使用async。这里是东西,async确保函数返回一个承诺,并在它包装非承诺。关键字await使得JavaScript的等待,直到承诺落户并返回其结果。 await只能内部async功能。所以,你可以完全避免使用这些或需要相应地格式化。

第三个错误是,你正试图从为其基本不容许,因为它不是在函数内部包裹,如果条件的循环做return true;

第四个错误是,你是不是调用window.onload功能 - 作为结果,它总是返回false即使在页面加载。

第五个问题是,我不知道是什么不完全resolvewindow.sleep功能正在做什么。

第六个问题是,你是在年底返回return false;没有这是完全没有意义的任何引用。

我已经修改了代码,并避免上述错误,请调查一下。

下面是修改后的JavaScript代码:

var status = false;
window.sleep = function() { 
    return setTimeout(() => {
        console.log("=> Waited for 2 seconds...");
    }, 2000);
}
var getStatus = function() {
    for(var i = 0; i < 30; i++) {
        if(window.onload = function() {
            return true;
            }) {
            status = true;
            console.log(i+"). Loaded ? "+status);
            break;
        } else {
            console.log(i+"). Loaded ? "+status);
            sleep();
        }
    }
    return status;
}
getStatus();

尝试下面这些在页面加载后打印true Java代码:

System.setProperty("webdriver.chrome.driver", "C:\\NotBackedUp\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("http://www.google.com");
JavascriptExecutor js = (JavascriptExecutor) driver;
Boolean result = (Boolean) js.executeScript("var status = false;\r\n" + 
        "window.sleep = function() { \r\n" + 
        "   return setTimeout(() => {\r\n" + 
        "       console.log(\"=> Waited for 2 seconds...\");\r\n" + 
        "   }, 2000);\r\n" + 
        "}\r\n" + 
        "var getStatus = function() {\r\n" + 
        "   for(var i = 0; i < 30; i++) {\r\n" + 
        "       if(window.onload = function() {\r\n" + 
        "           return true;\r\n" + 
        "           }) {\r\n" + 
        "           status = true;\r\n" + 
        "           console.log(i+\"). Loaded ? \"+status);\r\n" + 
        "           break;\r\n" + 
        "       } else {\r\n" + 
        "           console.log(i+\"). Loaded ? \"+status);\r\n" + 
        "           sleep();\r\n" + 
        "       }\r\n" + 
        "   }\r\n" + 
        "   return status;\r\n" + 
        "}\r\n" + 
        "return getStatus();");
System.out.println(result);

我希望它可以帮助...

© www.soinside.com 2019 - 2024. All rights reserved.