browser.executeScript(返回window.document.readyState)在量角器中没有得到解决

我想让我的脚本等待,直到网页完全加载为此,我正在使用JavaScript表达式“window.document.readyState”它将如果页面完全加载,则返回“完整”。browser.executeScript(返回window.document.readyState)在量角器中没有得到解决

function waitForWebpageLoadingCompletely(callback) { 

try {

var status="Incomplete";

do {

var flag = browser.executeScript("return window.document.readyState ;");

//console.log(flag)

flag.then(function (state) {

console.log(state);

if(state==="complete")

callback();

else {

//status = "Incomplete";

console.log(state);

}

},function (err) {

console.log(err)

})

}while(!(status ==="complete"));

} catch (e) {

expect(false);

console.log(e);

callback();

}

}

但executeScript不解决任何成功或错误。执行停在这一行。而一段时间之后,给出以下eror: 致命错误:CALL_AND_RETRY_LAST分配失败 - 的JavaScript堆出来的内存

回答:

您需要使用browser.wait - 您在您的评论,你需要等待页面标题所提到的,所以你会需要写是这样的:

var WaitForPage = function(pageTitle, timeout = 30000){ 

var deferred = promise.defer();

browser.waitForAngular().then(function(){

var el = element(by.cssContainingText('h1', pageTitle));

var EC = protractor.ExpectedConditions;

browser.wait(EC.presenceOf(el), timeout).then(function(){

deferred.fulfill();

});

});

return deferred.promise;

}

此功能将等待30000ms为h1包含指定pageTitle文本类型的元素。根据您的情况进行适当更改,然后在继续之前致电WaitforPage('title')

回答:

实际上,webdriver的这种类型的等待已经开箱即用。不太清楚为什么你需要实现自己的池和等待文档就绪状态。

如果你使用一些AngularJS/ReactJS或其他SPA应用程序 - 这种等待将不会给你什么,因为在这样的应用程序中,所有的工作都是在页面加载完成并且js开始执行之后完成的。

我宁愿使用关于使用browser.wait()来显示某些特定元素的@ m-hudson建议。

以上是 browser.executeScript(返回window.document.readyState)在量角器中没有得到解决 的全部内容, 来源链接: utcz.com/qa/263241.html

回到顶部