Есть похожие вопросы (связанные ниже), но ни один из них не решает эту проблему. Я пишу тесты Protractor для Ionic Project. Мне нужно выполнять тесты время от времени, когда появляется и исчезает диалоговое окно Ionic Loading.
Я создал репозиторий с голыми костями приложения и тестами, которые необходимо выполнить. Решите это, и вы решите проблему (я описываю проблему ниже): https://github.com/TmanTman/StackoverflowQ а>. Просто адаптируйте путь к вашему Chrome для вашей системы в conf.js.
Чтобы смоделировать диалоговое окно асинхронной загрузки Ionic, я просто добавляю это в контроллер в пустой проект 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);
})
Я пытаюсь избежать использования функции синхронного сна, так как мой код очень асинхронный. Я пробовал бесчисленное количество вариантов, но я не могу заставить его работать. Ссылки, которые я использовал для информации, включают: