AngularJS Protractor - Как вы проверяете входящий вызов AJAX?

У меня есть кнопка, которая после нажатия посылает AJAX-вызов в Angular's $promise формат. После успешного входа в систему $scope переменная изменяется и элемент выглядит так:

<section id="logged-in-section" ng-if="auth.user !== null">
    // Section to display if logged in
</section> 

отображается. В настоящее время я тестирую вышеупомянутое со следующим:

loginButton.click();
browser.sleep(2000);
expect($("#logged-in-section").isDisplayed()).toBeTruthy();

browser.sleep(2000) бездействует браузер в течение двух секунд, прежде чем транспортир проверяет, logged-in-section был отображен. Если я достану browser.sleep(2000)тест не пройден, поскольку между нажатием кнопки входа в систему и ответом, полученным с сервера, существует задержка.

Каков синтаксис для цепочки кнопки входа в систему expect заявление, так что транспортир проверяет только #logged-in-section после $promise возвращается?

1 ответ

Вы можете сделать это:

loginButton.click().then(function(){
   browser.waitForAngular().then(function (){ //this should wait for the angular digest process to finish
      expect($("#logged-in-section").isDisplayed()).toBeTruthy();
   })
});

или это должно работать для:

loginButton.click().then(function(){
   browser.wait(element(by.id("logged-in-section")).isDisplayed);
   expect($("#logged-in-section").isDisplayed()).toBeTruthy();
});
Другие вопросы по тегам