Navigating from one single page angular app to another with protractor gives "javascript error: document unloaded while waiting for result"

Navigating from one single page angular app to another with protractor gives "javascript error: document unloaded while waiting for result"

我看过这个:

它有点管用,但我一直认为应该有一种方法可以在不让浏览器休眠的情况下执行此操作。

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

当用量角器测试这个流程时(登录主页 --> 在主页上做点什么),大约 80% 的时间 Angular 会给我:

Failed: javascript error: document unloaded while waiting for result

提交登录信息后立即上线

我可以在登录代码后立即在 "waitForNewAngularPage" 中睡眠来解决这个问题,例如:

测试:

helper.doSomeDBSetup();
helper.login(userEmail, password);
helper.waitForNewAngularPage("home");

performTestOnThisPage();

等待页面代码:

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.
};

有什么方法可以帮助量角器在不同的单页 angular 应用程序之间转换时不会丢失?

鉴于在两个地方都没有休眠的情况下使用此登录功能时测试不起作用,当我们在应用程序之间切换时,量角器在页面转换之前和之后似乎都感到困惑,但我不知道如何解决它或者还有什么我应该等待的。

(我查看了 https://github.com/angular/protractor/issues/2600 和类似的问题,添加尽可能多的 browser.waitForAngular() 没有这些睡眠并不能解决任何问题。)

尝试在配置文件中增加 Protractor defaultTimeoutInterval

jasmineNodeOpts: {
  defaultTimeoutInterval: 30000 
}

您也可以在这里阅读更多内容,https://github.com/angular/protractor/blob/master/docs/timeouts.md

看起来没有人真正找到更好的解决方法,所以我只为后代回答。查看关于我们所做的原始问题的评论:

As unsatisfying as it may be, I'm pretty sure we just went with using the sleeps @MichielThalen (We're now using React with Nightwatch for our front end/integration tests, 2 years saw a lot of changes :P)