Транспортир генерирует ошибку при отключении управления потоком для тестирования приложения Angular - PullRequest
0 голосов
/ 12 февраля 2019

Я боролся с этой ошибкой некоторое время, и у меня кончилась мана.В настоящее время я пытаюсь протестировать приложение Angular с транспортиром и async / await.Согласно документу, я должен отключить поток управления, добавив в свой файл конфигурации следующее:

SELENIUM_PROMISE_MANAGER: false, но при этом выдается следующая ошибка:

UnhandledPromiseRejectionWarning: Error: Error while waiting for Protractor to sync with the page: "both angularJS testability and angular testability are 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 https://github.com/angular/protractor/issues/2643 for details" Я посетилurl (https://github.com/angular/protractor/issues/2643), но это не очень помогло.

На данный момент я не уверен, что я делаю что-то не так или это ошибка с самим транспортиром. Для этогопричина, по которой я также открыл проблему на GitHub .

Вот мой тест:

import {
    browser,
    ExpectedConditions,
    $
} from 'protractor';

describe('When user click \"Test\" button', async () => {
  beforeAll(async () => {
    expect(browser.getCurrentUrl()).toContain('myawesomewebsite');
  });

  it ("should click the button", async () => {
    var button = $(".button");
    button.click();
  });
});

А вот моя полная конфигурация:

exports.config = {
  capabilities: {
    'browserName': 'chrome'
  },
  seleniumAddress: 'http://localhost:4444/wd/hub',
  framework: 'jasmine',
  specs: ['test.spec.ts'],
  SELENIUM_PROMISE_MANAGER: false,
  jasmineNodeOpts: {
    defaultTimeoutInterval: 30000
  },    
  beforeLaunch: function () {
    require('ts-node/register')
  }
};

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Итак, благодаря @CrispusDH на GitHub, я понял, что могу использовать waitForAngularEnabled в файле конфигурации, а не только в файле спецификации.Использование его в файле спецификации не работало, но если его использовать в хуке onPrepare файла конфигурации, ошибка исчезнет.

Многие интернет-ресурсы говорят, что для него задано значение false, но этоу меня не получалось, так как Protractor не мог найти элемент без ожидания Angular, поэтому я установил его в false в конфигурации и файле, но вызвал browser.waitForAngularEnabled(true); в моем файле спецификаций (beforeAll hook).Теперь ошибка исчезла, что позволяет мне использовать async/await.

Вот правильная конфигурация для использования:

  SELENIUM_PROMISE_MANAGER: false,
  onPrepare: async () => {
    await browser.waitForAngularEnabled(false);
  }

А вот код для вызова в spec-файле:

  beforeAll(async () => {
    browser.waitForAngularEnabled(true);
  });
0 голосов
/ 12 февраля 2019

Вы пропустили await перед каждым вызовом API транспортира.

describe('When user click \"Test\" button', async () => {
  beforeAll(async () => {
    expect(await browser.getCurrentUrl()).toContain('myawesomewebsite');
  });

  it ("should click the button", async () => {
    var button = $(".button");
    await button.click();
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...