Есть похожие вопросы (см. ниже), но никто не решает эту проблему. Я пишу протракторные тесты для Ионного проекта. Мне нужно выполнить тесты, когда появляется диалоговое окно "Ионная загрузка" и исчезает.
Я создал репо с голыми костями приложения и те тесты, которые нужно выполнить. Решите эту проблему и решите проблему (я описываю проблему ниже): https://github.com/TmanTman/StackoverflowQ. Просто настройте путь к вашему Chrome для своей системы в conf.js.
Чтобы смоделировать диалоговое окно асинхронной ионической загрузки, я просто добавляю это в контроллер в пустой проект Ionic:
$interval( function() {
$ionicLoading.show({
template: 'Async ionicLoading',
duration: 5000
});
}, 5000 , 1);
})
Мне нужно заставить транспортир ждать появления диалогового окна, выполнить некоторые тесты, дождаться исчезновения диалога, а затем выполнить еще несколько тестов. Моя последняя попытка в моем тестовом файле:
it('should only test when ionicLoading appears', function() {
browser.wait(function(){
return element(by.css('.loading-container.visible.active')).isPresent();
}, 10000);
var ionicLoadingText = element(by.css('.loading-container.visible.active')).getText();
expect(ionicLoadingText).toEqual('Async IonicLoading');
})
it('should only test once ionicLoading disappears', function() {
browser.wait(function() {
var deferred = protractor.promise.defer();
var q = element(by.css('.loading-container.visible.active')).isPresent()
q.then( function (isPresent) {
deferred.fulfill(!isPresent);
});
return deferred.promise;
});
expect(1).toEqual(1);
})
Я пытаюсь избежать использования синхронной функции сна, так как мой код очень асинхронный. Я пробовал бесчисленные вариации, но я не могу заставить его работать. Ссылки, которые я использовал для информации, включают: