Транспортир не может найти переменную angular и ждать, пока время по умолчанию Жасмин приведет к провалу тестов - PullRequest
0 голосов
/ 21 января 2020

Я автоматизирую некоторые тестовые случаи для приложения angular. У меня есть следующее понимание Protractor как:

  1. В angular приложениях нет необходимости явного ожидания, как селен, поскольку 90% -ые команды транспортира возвращают обещания, то есть это означает, что транспортир ждет самостоятельно.
  2. Функция транспортира WaitForAngularEnabled() по умолчанию true.

Проблема, с которой я сталкиваюсь, заключается в том, что при автоматизации тестов для моего приложения angular, когда я тестирую свое приложение, Транспортир ждет (и я предполагаю, что он ждет переменную angular), пока не истечет время по умолчанию Жасмин и все тесты не пройдут. Когда я тестирую свое приложение как Non-Angular (измените мои настройки транспортировщика ( код прилагается )), все тестовые случаи работают нормально, но я должен явно добавить ожидания, которые приводят к очень нестабильным тестам. Это также увеличивает время выполнения теста. Может ли кто-нибудь помочь мне в вышеупомянутой проблеме. Буду вам очень благодарен.

onPrepare() {
    require('ts-node').register({
      project: 'e2e/tsconfig.e2e.json'
    });
    browser.waitForAngularEnabled(false);//Disabled angular here
    browser.driver.manage().window().maximize();
    jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
  }

1 Ответ

1 голос
/ 22 января 2020

Когда Protractor связывается с Angular, он использует Angular API тестируемости, API возвращает переменную is_stable. Если эта переменная имеет значение true, это означает, что ваш Angular веб-сайт стабилен. Это означает, что все обещания на вашей странице были выполнены, и нет активных процессов, которые страница ожидает до конца sh.

ПРИМЕЧАНИЕ. Флаг is_stable выдаст значение false, если на вашей странице все еще есть элементы, требующие разрешения. Эта проблема обычно возникает, если ваш веб-сайт имеет какие-либо сторонние интеграции, которые продолжают работать в фоновом режиме, или если что-то на мобильной стороне не загружается на веб-странице. Если это так, вам необходимо проверить, есть ли какие-либо процессы, ожидающие на вашей веб-странице. Если есть какие-либо процессы, вам придется переместить их за пределы Angular. Таким образом Angular разрешит все обещания и сообщит транспортиру, что он готов к приему команд.

Другой способ удалить явные ожидания из вашего кода - использовать asyn c await. Asyn c await прост в использовании и будет явно ждать любого разрешения обещания перед тем, как продолжить. В настоящее время менеджер обещаний селена берет на себя все обещания, если вы используете старую версию транспортира, в противном случае менеджер обещаний отключен (устарел), поэтому вам придется вручную позаботиться обо всех обещаниях.

...