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

时间:2015-10-14 22:54:19

标签: javascript angularjs webdriver protractor

我看过这个:JavascriptError: javascript error: document unloaded while waiting for result

它有点有效,但我还是认为应该有办法在不睡觉浏览器的情况下做到这一点。

基本上,我们的应用程序包含多个连接的单页角度应用程序。当我们从登录页面进入用户主页时,我们会触发页面加载。

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

Failed: javascript error: document unloaded while waiting for result

在提交登录信息后立即在行上。

我可以通过睡眠来解决这个问题" waitForNewAngularPage"在登录代码之后立即:

TEST:

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

有没有办法帮助量角器在不同的单页角度应用程序之间转换时不会迷路?

鉴于在两个地方使用此登录功能而没有睡觉时测试不起作用,当我们在应用程序之间切换时,似乎量角器在页面转换之前和之后都会混淆,但我不知道如何解决它或者是否还有其他我应该等待的东西。

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

2 个答案:

答案 0 :(得分:1)

看起来没有人能真正找到更好的方法,所以我只会回答后人的问题。查看我们所做的原始问题的评论:Navigating from one single page angular app to another with protractor gives "javascript error: document unloaded while waiting for result"

  

尽管不满意,但我很确定我们只是使用睡眠@MichielThalen(我们现在使用React和Nightwatch进行前端/集成测试,2年后看到了很多变化:P )

答案 1 :(得分:0)

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

jasmineNodeOpts: {
  defaultTimeoutInterval: 30000 
}

另外,您可以在此处阅读更多内容,https://github.com/angular/protractor/blob/master/docs/timeouts.md