Я работаю над переносом моего приложения AngularJS (1.6) на Angular (4), и теперь у меня есть гибридное приложение, загружаемое с помощью NgUpgrade.
Однако это, похоже, полностью нарушило мои тесты транспортира.
Ошибка: время ожидания завершения асинхронных задач Angular истекло через 11 секунд. Это может быть связано с тем, что текущая страница не является приложением Angular. Дополнительные сведения см. В разделе часто задаваемых вопросов: https://github.com/angular/protractor/blob/master/docs/timeouts.md#waiting-for-angular
В ожидании элемента с локатором - Локатор: По (селектор css, .toggle-summary-button)
Изменения в гибридном приложении
Приложение работает нормально, и компоненты AngularJS и Angular работают должным образом. В процессе начальной загрузки я внес следующие изменения:
1 Удалено ng-app
из тега html:
<html lang="en" *ng-app="myapp">
2 Добавлены модули приложений (@NgModule) и т. Д.
3 Использовал NgUpgrade для начальной загрузки приложения:
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { UpgradeModule } from '@angular/upgrade/static';
import { AppModule } from './app.module';
platformBrowserDynamic().bootstrapModule(AppModule).then(platformRef => {
const upgrade = platformRef.injector.get(UpgradeModule) as UpgradeModule;
upgrade.bootstrap(document.body, ['myapp'], {strictDi: true});
});
Тесты транспортира
Исходя из указанной выше ошибки, проблема, похоже, связана с тем, что делает Protractor, когда ожидает Angular. У меня есть блок beforeEach, который загружает страницу входа, заполняет данные и входит в систему. Как ни странно, он все еще открывает страницу и вводит текст в поле имени пользователя, но затем не может идти дальше.
Я не могу понять, почему здесь все по-другому, и никакие изменения вокруг не помогают, поэтому любое руководство будет очень кстати!
Я безуспешно пробовал:
- добавление rootElement: 'body' в мой конфигурационный файл транспортира
- добавление ng12Hybrid: true в мой конфигурационный файл транспортира - я получаю сообщение о том, что он больше не нужен, поскольку он автоматически определяет.
- увеличив значение параметра
allScriptsTimeout
с 11000 до 60000, время ожидания по-прежнему истекает. - отключение настройки
waitForAngularEnabled
. Это решает проблему с полями входа в систему, но тогда ни один из моих HTTP-макетов не работает, и тесты терпят неудачу.