2014-12-23 5 views
2

나는 afterEach를 사용하여 로그 아웃하지만, 내 테스트는 afterEach가 로그 아웃을 완료하기 전에 로그인을 시도합니다.afterEach가 완료되기를 기다리지 않고 계속하기 전에

나는 sleep 문을 사용하지 않으려 고하고있다.

이전의 이전 완료를 기다리는 테스트를 어떻게받을 수 있습니까?

코드 조각 :

afterEach(function() { 
    AccountBlock.logout().then(function(){ 
     browser.sleep(2000); // I want to get rid of this 
    }); 
}); 

합니다 (AccountBlock 개체에서) 로그 아웃() 메소드 :

this.logout = function() { 
    var logoutLink = this.logoutLink; 
    var userName = this.userName; 
    return logoutLink.isDisplayed().then(function(isDisplayed){ 
     if (!isDisplayed) { 
      return userName.click().then (function() { 
       return logoutLink.click(); 
      }); // open the account menu before logout 
     } else { // account menu already displayed 
      return logoutLink.click(); 
     } 
    }); 
} 
this.userName = element(by.css('a[ng-bind="userName"]')); 
this.logoutLink = element(by.css('a[ng-click^="logout"]')); 
+1

답을 쉽게하기 위해 몇 가지 코드를 포함하십시오. –

+0

코드 스 니펫으로 원래 게시물에 추가됨 – HenrikBechmann

+0

각도기는 [onPrepare로 로그인하는 것이 좋습니다] (http://angular.github.io/protractor/#/faq#how-do-i-deal-with-my- 로그인 - 페이지 -), 모든 테스트를 실행하기 전에 앱에 한 번만 로그인하십시오. 모든 테스트 후에 정말로 로그 아웃해야합니까? – user2943490

답변

0

내가 로그인 블록에 잠을(), 방지하기 위해 browser.wait()를 사용 코드 수행 할 수 있습니다

var doLogin = function(){ 
      browser.wait(element(by.id('yourLoginBoxId')).isDisplayed); //this will wait until the html with the form to login is in your DOM 
      //your code to login here 
     }; 

참고 isDisplayed에는()이 없습니다.

1

browser.wait은 명확하게 이동하는 길입니다. 요소가 있는지 여부를 직접 물어 보는 대신 요소를 호출하여 분도기에 ExpectedConditions이라는 내장 함수가 내장되어 있는지 묻습니다. 이 let protractor를 사용하여 예상 조건을 충족 할 때까지 브라우저를 기다리게 할 수 있습니다.

아래에서 예상 조건을 사용하여 요소의 존재를 감지 한 다음 not 연산자를 사용하여 요소가 더 이상 존재하지 않는 것을 감지했습니다. 이것은 browser.wait가 그 조건이 참 (true)이 될 때까지 미래의 약속을 멈추게해야한다.

afterEach(function(){ 
    var ec = protractor.ExpectedConditions; 
    var logout = element(by.css('a[ng-click^="logout"]')); 
    var logoutLink = ec.presenceOf(logout); 
    var logoutLinkNotThereAnymore = ec.not(logoutLink); 

    //do logout 
    browser.wait(logoutLinkNotThereAnymore, 10000, "Waited 10 seconds"); 
}); 

beforeEach(function(){ 
    //do login 
});