browser.executescript(返回窗口



我想让我的脚本等到网页被完全加载到我使用的javascript表达式" window.document.dreadstate",如果页面完全加载,它将返回"完整"。

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并未解决任何成功或错误。执行停止在此行。一段时间后,它给出了以下的范围:致命错误: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,以获取包含指定pageTitle文本的类型h1元素。适当地更改以适应您的情况,然后在继续之前致电WaitforPage('title')

实际上WebDriver可以从包装盒中进行此类等待。不太确定为什么您需要实施自己的池并等待文档准备就绪状态。

如果您使用某些AngularJS/ReactJ或其他SPA应用程序 - 此等待实际上不会给您任何东西,因为在这样的应用程序中,所有工作都在加载页面并开始执行JS之后完成。

我希望使用 @m-hudson的建议,以使用browser.wait()出现一些特定元素。

最新更新