javascript - 使用 Protractor 从一个单页 Angular 应用程序导航到另一个 Angular 应用程序会给出 "javascript error: document unloaded while waiting for result"

标签 javascript angularjs webdriver protractor

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

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

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

当使用 Protractor 测试这个流程时(登录主页 --> 在主页上做一些事情),大约 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.
};

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

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

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

最佳答案

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

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)

关于javascript - 使用 Protractor 从一个单页 Angular 应用程序导航到另一个 Angular 应用程序会给出 "javascript error: document unloaded while waiting for result",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33137038/

相关文章:

javascript - 解决 Firebase GetRecord 之前 View 加载不完整的问题

javascript - Mongoose 连接无法处理错误

javascript - 如何从异步调用返回响应?

selenium - 如何使用 Selenium WebDriver 获取图像 src 名称

java - 如何让内容显示在 WebDriver .get 请求中?

javascript - 使用 selenium 从 window.location 获取 url

javascript - 如何创建相对内联样式?

javascript - 当模型数据在 angularjs 中的表单之外更改时,如何正确检查观察者中的表单有效性?

java - 如何在java中的webservices中返回json作为响应

javascript - vaadin:使用自定义布局集成 Angular JS