【发布时间】:2019-07-01 02:55:33
【问题描述】:
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;
更新:抱歉,我的帖子中出现了之前的语法错误“功能”。那是一个错字,不在我的实际代码中。所有语法错误都应该消失了,但我仍然收到“SyntaxError: Unexpected identifier”。
这段代码试图做的是等待页面加载的最长时间。我通常返回 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