Действительно, в вашем коде JavaScript есть некоторые ошибки.
Первая ошибка в третьей строке window.sleep = funtion() { return new Promise(resolve => setTimeout(resolve, 2000)); }
- неправильное написание function
.
Вторая ошибка - это выне следует использовать await
, если в определении функции нет async
.Вот в чем дело, async
гарантирует, что функция возвращает обещание и оборачивает в него не обещания.Ключевое слово await
заставляет JavaScript ждать, пока это обещание выполнится и вернет его результат.await
работает только внутри async
функций.Таким образом, вы можете избежать их полного использования или отформатировать его соответствующим образом.
Третья ошибка заключается в том, что вы пытаетесь выполнить return true;
из цикла for условия if, которое в принципе не разрешено, потому что ононе заключен в функцию.
Четвертая ошибка заключается в том, что вы не вызываете функцию 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();
Попробуйте приведенный ниже код Java, которыйпечатает true
после загрузки страницы:
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);
Надеюсь, это поможет ...