Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法在量角器中解析browser.executeScript(返回窗口.document.readyState)_Javascript_Protractor - Fatal编程技术网

Javascript 无法在量角器中解析browser.executeScript(返回窗口.document.readyState)

Javascript 无法在量角器中解析browser.executeScript(返回窗口.document.readyState),javascript,protractor,Javascript,Protractor,我想让我的脚本等待网页完全加载,我使用的是javascript表达式window.document.readyState,如果页面完全加载,它将返回complete function waitForWebpageLoadingCompletely(callback) { try { var status="Incomplete"; do { var flag = browser.executeScript("return window.document.ready

我想让我的脚本等待网页完全加载,我使用的是javascript表达式window.document.readyState,如果页面完全加载,它将返回complete

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: 致命错误:调用和重试上次分配失败-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;
}

对于包含指定pageTitle文本的h1类型元素,此函数将等待30000ms。根据您的情况进行适当的更改,然后在继续之前调用WaitforPage'title'。

实际上,webdriver已经完成了这种类型的等待。不太清楚为什么需要实现自己的池并等待文档就绪状态

如果您使用一些AngularJS/ReactJS或其他SPA应用程序,这种等待实际上不会给您任何帮助,因为在此类应用程序中,所有工作都是在页面加载和js开始执行之后完成的


我更愿意使用@m-hudson关于使用浏览器的建议。请等待某些特定元素出现。

这可能是因为您正在同步循环中调用异步方法executeScript。@Florent B,对此有什么解决方案?谢谢。看一看。请注意,由于驱动程序在默认情况下已经在等待这个状态,所以等待完成状态是无用的。我真的对量角器的这个功能感到困惑,因为驱动程序在默认情况下会等待。我有一个场景,当我传递凭证并单击submit时,仪表板将加载。我只是想验证标题是否正确。当页面完全加载时,标题会正确显示。若驱动程序等待加载,则标题验证应始终通过,但在单击“提交”后,说明标题不匹配时失败。我正在使用回调使其同步。谢谢。我将实施同样的措施。