Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.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错误:等待结果时卸载文档;_Javascript_Angularjs_Webdriver_Protractor - Fatal编程技术网

使用量角器从一个单页角度应用程序导航到另一个角度应用程序;javascript错误:等待结果时卸载文档;

使用量角器从一个单页角度应用程序导航到另一个角度应用程序;javascript错误:等待结果时卸载文档;,javascript,angularjs,webdriver,protractor,Javascript,Angularjs,Webdriver,Protractor,我已经看过了: 这是一种工作方式,但我一直在想,应该有一种方法可以做到这一点,而不必在浏览器上睡觉 基本上,我们的应用程序由几个连接的单页应用程序组成。当我们从登录页面转到用户主页时,会触发页面加载 使用量角器(登录主页-->在主页上执行操作)测试此流时,大约80%的时间Angular会给出: Failed: javascript error: document unloaded while waiting for result 在提交登录信息后立即联机 我可以在登录代码之后立即在“waitF

我已经看过了:

这是一种工作方式,但我一直在想,应该有一种方法可以做到这一点,而不必在浏览器上睡觉

基本上,我们的应用程序由几个连接的单页应用程序组成。当我们从登录页面转到用户主页时,会触发页面加载

使用量角器(登录主页-->在主页上执行操作)测试此流时,大约80%的时间Angular会给出:

Failed: javascript error: document unloaded while waiting for result
在提交登录信息后立即联机

我可以在登录代码之后立即在“waitForNewAngularPage”中睡眠来解决此问题,如下所示:

测试:

等待页面代码:

exports.waitForNewAngularPage = function (page) {
  return browser.driver.wait(function () {
    return browser.driver.getCurrentUrl().then(function (url) {
      return url.indexOf(page) > -1;
    });
  }, TIMEOUT).then(function() {
    // TODO - we shouldn't need to sleep.  We need to figure out how to load angular when switching
    // between different single page angular apps so that protractor doesn't get confused.
    return browser.sleep(1000);
  });
};
登录代码:

exports.login = function (email, password) {
  browser.get(browser.baseUrl + "/login");
  exports.waitForNewAngularPage("login");

  //login user
  element(By.css('[role="email"]')).sendKeys(email);
  element(By.css('[role="password"]')).sendKeys(password);
  element(By.css('[role="submit"]')).click();
  browser.sleep(500); // TODO - this should not require a sleep.
};
在不同的单页角度应用程序之间转换时,有什么方法可以帮助量角器不丢失

考虑到使用这个登录功能时,如果两个地方都没有睡眠,测试就不起作用,当我们在应用程序之间切换时,在页面转换前后,量角器似乎都会感到困惑,但我不知道如何解决这个问题,或者是否还有其他问题需要等待


(我已经研究了和类似的问题,并添加了尽可能多的
浏览器。waitForAngular()
s在没有这些睡眠的情况下无法修复任何问题。)

尝试增加配置文件中的
量角器defaultTimeoutInterval

jasmineNodeOpts: {
  defaultTimeoutInterval: 30000 
}

您也可以在这里阅读更多内容,

看来没有人真的找到了更好的解决方法,所以我将为子孙后代回答这个问题。查看对原始问题的评论,了解我们做了什么:


尽管这可能令人不满意,但我很确定我们只是使用了sleeps@michielhalen(我们现在在前端/集成测试中使用React with Nightwatch,两年来发生了很多变化:p)


这并不是说它在执行之前就达到了超时时间——当它被卡住时,它会一直挂起直到它达到超时时间,当它没有达到超时时间时,它会在几秒钟后执行。如果量角器在应用程序转换时“丢失”,增加超时只会使其挂起时间更长。嘿,我们也遇到了类似的问题。你发现了什么原因以及如何解决这个问题了吗?尽管这可能令人不满意,但我很确定我们只是使用了sleeps@michielhalen(我们现在在前端/集成测试中使用React with Nightwatch,2年来发生了很多变化:P)(y):+1:竖起大拇指
jasmineNodeOpts: {
  defaultTimeoutInterval: 30000 
}