页面重定向时量角器的执行挂起

时间:2019-03-13 14:53:12

标签: angular typescript protractor

我有一个问题,当页面被重定向时,量角器的执行挂起。

describe('describe something', () => {
  beforeAll(() => {
    helpers.login();
    page.elementThatNavigatesToAnotherPage.click();
  });

  afterAll(() => {
    helpers.logout();
  });

  it('should something', () => {
    expect(page.someElement.isPresent()).toBe(true);
  });
});

只要page.elementThatNavigatesToAnotherPage.click()beforeAll()中,量角器的执行就会挂起并超时。如果删除它,该测试将通过/失败并继续运行其他测试。

我的login()函数如下所示:

export function login(): void {
  const loginPage = new LoginPage();

  browser.get('#/login');

  browser.wait(until.presenceOf(elementOnLoginPage), TIMEOUT).then(() => {
    loginPage.submit('username', 'password');
    loginPage.optionButton.click();

    browser.wait(until.presenceOf(elementOnNextPage), TIMEOUT);
  });
}

2 个答案:

答案 0 :(得分:0)

您的登录功能似乎有缺陷。量角器功能waitclicksubmit都是异步的。他们回报了诺言。这意味着您必须等待返回的承诺解决,然后才能继续执行。 例如

loginPage.submit('username', 'password')
 .then(() => {
     loginPage.optionButton.click()
     .then(() => {
          browser.wait(until.presenceOf(elementOnNextPage), TIMEOUT);
      });
  });

答案 1 :(得分:0)

正如@Robert所提到的,您需要等到helpers.login()函数返回一个Promise。这是我当前使用的代码段

describe('Go to login page and then admin', () => {
    beforeAll(() => {
        navigateTo('login').then(()=> {
            <do something>
        });
        navigateTo('admin');
    });
});

navigateTo(path: string) {
    browser.waitForAngularEnabled(true);
    return browser.get(path).then(() => {
        browser.waitForAngularEnabled(false);
    });
}