量角器在非角度页面上等待元素

时间:2018-03-27 18:07:41

标签: angular protractor

我正在使用量角器测试页面。在各种测试用例中,我需要等到对象加载完毕。以下是脚本的摘录。虽然这不会显示任何错误,但它无法等待对象出现,并且测试用例会失败,直到页面能够赶上。

login.e2e-spec.ts

  it('should display company logo', () => {
    page.navigateTo();
    page.clickImplicitGrantButton()
      .then(() => browser.wait(ExpectedConditions.visibilityOf(browser.getLogo()), 10000))
      .then(() => page.isLogoVisible()
      .then((isVisible) => {
        expect(isVisible).toBe(true);
    }));
  });

login.po.ts

clickImplicitGrantButton() {
    return $('button.mat-button#implicit').click();
  }

getLogo() {
    return browser.driver.findElement(by.className('main-logo'));
  }

isLogoVisible() {
    return this.getLogo().isDisplayed();
  }

1 个答案:

答案 0 :(得分:0)

使用@tehbeardedone建议使用.element(),我通过添加一行更改来发现修复。这是解决方案:

  it('should display company logo', () => {
    browser.ignoreSynchronization = true;
    page.navigateTo();
    page.clickImplicitGrantButton();
    browser.wait(ExpectedConditions.visibilityOf(browser.element(by.className('main-logo'))), 10000)
      .then(() => page.isLogoVisible()
      .then((isVisible) => {
            expect(isVisible).toBe(true);
    }));
  });

当我使用.element()命令时,我不断收到错误:

- Failed: Error while waiting for Protractor to sync with the page: "window.angular is undefined. This could be either because this is a non-angular page or because your test involves client-side navigation, which can interfere with Protractor's bootstrapping. See http://git.io/v4gXM for details"

进一步调查显示,由于页面是非角度的,因此无法与Protractor同步运行,您需要添加到测试用例中:

    browser.ignoreSynchronization = true;

这将允许页面独立于脚本运行,并且必须在非角度页面上使用.wait()

感谢您的投入,我希望这对将来尝试做同样事情的其他人有所帮助!