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代码中的一些错误。
第一个错误是,在第三行window.sleep = funtion() { return new Promise(resolve => setTimeout(resolve, 2000)); }
,该function
拼写是错误的。
第二个错误是当出现在函数定义没有await
你不应该使用async
。这里是东西,async
确保函数返回一个承诺,并在它包装非承诺。关键字await
使得JavaScript的等待,直到承诺落户并返回其结果。 await
只能内部async
功能。所以,你可以完全避免使用这些或需要相应地格式化。
第三个错误是,你正试图从为其基本不容许,因为它不是在函数内部包裹,如果条件的循环做return true;
。
第四个错误是,你是不是调用window.onload
功能 - 作为结果,它总是返回false即使在页面加载。
第五个问题是,我不知道是什么不完全resolve
在window.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);
我希望它可以帮助...