0

저는 현재 회사가 개발중인 AngularJS 앱을 테스트하기 위해 각도기를 사용하여 일련의 테스트를 개발 중입니다. 현재 테스트를 통과했지만 그 중 하나에서 오류가 발생하지만 이유를 파악할 수 없습니다 ... 오류 메시지가 표시됩니다.각도기를 사용한 각도 검사 - 재스민 사양이 '기대치'절의 시간 초과로 나타납니다. WebDriver 제어 흐름 다시 설정?

재스민 사양이 초과되었습니다. WebDriver 제어 흐름 재설정.

오류 메시지가 콘솔에 표시하기 위해 다음과 같은 두 가지 테스트 스크립트의 첫 번째, 다음 물건의 실행의 끝 부분에 표시됩니다 두 번째 테스트의 시작부터 console.log() 성명 :

: 이러한 테스트가 작성되는 곳으로이 기능이 같은 spec.js 파일에 정의되어 있습니다 - browser.call(closeDlg); :이 두 가지 테스트 스크립트의 첫 번째 내부
it('should navigate to the Charts page', function() { 
    console.log("Start Charts page test"); 
    browser.waitForAngularEnabled(false); 
    browser.actions().mouseMove(chartsMenuBtn).perform(); 
    chartsMenuBtn.click(); 
    browser.waitForAngularEnabled(true); 
    browser.call(closeDlg); 
    expect(browser.getCurrentUrl()).toBe(VM + '/#/charts'); 
}); 

/*Test that 'Export' menu item works correctly */ 
it('should navigate to the Export page', function() { 
    console.log("Start Export page test"); 
    browser.waitForAngularEnabled(true); //false); 
    browser.actions().mouseMove(exportMenuBtn).perform(); 
    exportMenuBtn.click().then(function(){ 
     console.log("End Export page test (then call)"); 
     expect(browser.getCurrentUrl()).toBe(VM + '/#/export'); 

    }); 
    console.log("End Export page test"); 
}); 

, 나는 선을 사용하여 함수 closeDlg()를 호출하고

및이 함수의 모든 console.log() 문이이 함수의 모든 코드가 예상대로 실행됨을 나타내는 콘솔에 표시됩니다.

이 줄은 expect(browser.getCurrentUrl()).toBe(VM + '/#/charts'); 줄에 시간 초과가 발생하고 있지만이 줄이 실행될 때의 현재 URL을 테스트 스크립트가 실행되는 브라우저에서 볼 수 있습니다. 라인 closeDlg의

종료() 함수

는 타임 아웃이 라인이 있다고 제안하는 발생했을 때 그건의 closeDlg() 함수의 콘솔로 인쇄됩니다 :

 expect(browser.getCurrentUrl()).toBe(VM + '/#/charts'); 

스크립트가 시간 초과되는 원인은 실행될 다음 행이기 때문입니다.

테스트 스크립트 내의 여러 위치에서 browser.waitforAngularEnabled(true); &설정을 시도했지만 아무 것도 해결되지 않았거나 전혀 시간 초과 오류가 발생하지 않았습니다.

아무에게도 내가 왜 이것을 얻고있는 제안이 있습니까? 어떻게 해결할 수 있습니까?

+1

Ok ... [지난 금요일의 [이 사람]과 같은 질문입니다. (https://stackoverflow.com/questions/46973496/angularjs-testing-with-protractor-executing-asynchronous-scripts) . WaitForAngularEnabled()를 무작위로 켜고 끄는 것은 전혀 이해가되지 않습니다 ... 귀하의 페이지가 AngularJS이고 그 페이지에서 작동하거나 그렇지 않습니다. 또한'browser.call()','console'과'.then()'의 사용법은 분개 자나 자바 스크립트의 튜토리얼을 전혀 읽지 않은 것처럼 보입니다. 필자의 관점에서 볼 때 ControlFlow를 테스트하는 방식은 예측할 수없는 결과를 가져온다. 팁 : 튜토리얼을 먼저! –

+0

의견을 보내 주셔서 감사합니다. 나는 이것이 마지막 문제를 고쳤다는 사실 때문에 다른 문제라고 생각했다. 그러나, 내 테스트를 통해 살펴보면 이번에는'Export page' 테스트에서'browser.waitForAngularEnabled (true); '줄로 인해 문제가 발생한 것으로 보입니다. 이것을'false'로 바꾸면 테스트가 끝납니다. – someone2088

+1

나는 그것이 당신을 위해 일해서 다행이다. 나는 혼란 스럽다. 게시 한 지 1 시간도 채되지 않아서 자신의 해결책을 찾았다. 제안 된 코드도 확인하십시오. 훨씬 작고 덜 복잡하고 훨씬 안정적입니다. 제가 말씀 드리고자하는 것은, 여러분의 수정이 단지 몇 줄 뒤의 다음 문제로 이어질 것이라는 것입니다. 왜냐하면 분도기가 페이지와 무작위로 동기화되도록했기 때문에 몇 줄 밖에 남지 않았습니다. 다시 동기화하면 새로운 질문을 올릴 수 있습니다. –

답변

2

YouTube에서 약속의 의미와 잘리고있는 방법을 소개하는 일부 각도기 자습서를 확인해야합니다.

또한 일부 각도기 특정 문제에 대해 알아 보려면 여기를이 답변을 확인하십시오

:

모두 여기에 내 제안 코드에 후

beforeAll(function(done){ 
    browser.waitForAngularEnabled(false); //in case it doesn't work without this line. 
    var EC = protractor.ExpectedConditions; 
}); 

it('should navigate to the Charts page', function(done) { 
    // var chartsMenuBtn = ?? //this button-definition is missing in your example. 
    var closeDlgBtn = element(by.buttonText('Cancel')); 
    chartsMenuBtn.click(); 
    //browser.wait(EC.visibilityOf(closeDlgBtn),5000); //try first without, but it might be needed. 
    closeDlgBtn.click(); //no call to a function. Just click the button. 
    expect(browser.getCurrentUrl()).toBe(VM + '/#/charts'); 
    done(); 
}); 

/*Test that 'Export' menu item works correctly */ 
it('should navigate to the Export page', function(done) { 
    // var exportMenuBtn = ?? //this button-definition is missing in your example. 
    exportMenuBtn.click(); 
    //browser.waitForAngular(); //a help-line, if you need to tell Protractor, that he must wait for all promises to be resolved first. 
    expect(browser.getCurrentUrl()).toBe(VM + '/#/export'); 
    done(); 
}); 
browser.waitForAngularEnabled(true); 

있었어야 : 다음 Export page 테스트 내부

browser.waitForAngularEnabled(false); 

0

여기에 실제로 초에 의해 발생 된 문제는 선을 테스트 -. 이것을 변경하면 제한 시간 문제가 해결되고 테스트 스크립트가 예상대로 통과됩니다.