저는 현재 회사에서 개발 한 AngularJS 응용 프로그램 용 자동화 테스트를 개발 중입니다. 나는 이미 &을 설계하여 수많은 테스트 케이스를 개발했으며, 이는 예상대로 통과/실패한 &을 실행합니다.각도기 결합 법으로 AngularJS 테스트 - 애니메이션이 완료 될 때까지 기다리는 방법?
그러나, 나는 현재 개발하고 테스트와 함께, 내가 약속을 체인 때 문제로 실행 한 것, 그리고 그것을 해결 드릴 수 없습니다 ... 그것은 약자로 테스트 스크립트는 다음과 같습니다
it('should navigate to the browser page', function() {
console.log("Start browser page test");
browser.waitForAngularEnabled(false);
browser.wait(EC.visibilityOf(pagesMenuBtn), 10000).then(
browser.actions().mouseMove(pagesMenuBtn).perform().then(
//expect(pageBrowserBtn.isDisplayed()).toBeTruthy();
browser.wait(EC.visibilityOf(pageBrowserBtn), 12000).then(
pageBrowserBtn.click().then(
function() {
console.log("Browser menu button clicked");
//browser.pause();
}).then(
browser.wait(EC.visibilityOf(browserPageTagsLink), 20000).then(
function(){
console.log("End browser page test (then call)");
expect(browser.getCurrentUrl()).toBe(VM + '/#/pages/browser');
}
)
)
)
)
);
});
내 테스트 스크립트를 실행하면 (나는이 일하기 전에 실행되는 다른 시험의 번호를 가지고), 처음 몇 실행 & 패스 성공적으로이 테스트를 실행하기 시작 후 때 콘솔을 보여줍니다 : 그래서
Started
....Start browser page test
Browser menu button clicked
F
Failures:
1) App should navigate to the browser page
Message:
Failed: Wait timed out after 20010ms
Stack:
TimeoutError: Wait timed out after 20010ms at WebDriverError (C:\Users\path\selenium-webdriver\lib\error.js:27:5)
콘솔에 표시된 출력에서 이 테스트는 console.log("Browser menu button clicked);
문까지 정확하게 실행됩니다. 이는 내가 의도 한대로 메뉴 버튼에서 클릭이 수행되었음을 나타냅니다 (예 : 클릭 메뉴 버튼들은 커서 pagesMenuBtn
소자 가리키면 때만 도시 된 팝업 메뉴에 표시되고, 그래서 광고
browser.wait(EC.visibilityOf(pageBrowserBtn), 12000).then(
)이 올바르게 실행되는 것을 나타낸다. console.log("Browser menu button clicked");
문이 또한 콘솔에 표시되기 때문에
은, 그것은
pageBrowserBtn.click().then(
도 제대로 실행되고 있음을 나타냅니다.
그러나 어떤 이유로, 테스트는 browserPageTagsLink
요소가 표시되기를 기다리는 20 초 후 시간 초과됩니다.
이 요소는 내 테스트가 탐색하려고하는 '브라우저'페이지에 표시된 하이퍼 링크 요소 일뿐입니다. URL은 정확합니다 ...
하지만 테스트가 실행되는 브라우저 창에서 무슨 일이 벌어지고 있는지, 내 테스트가 실행되는 동안 콘솔에 표시되는 내용은 '멈추다'/ 일시 중지/콘솔에 Browser menu button clicked
메시지가 표시되면 잠시 멈추고이 버튼이 실제로 클릭되지 않은 브라우저 창을 볼 수 있습니다.이 버튼이 표시된 팝업 메뉴는 매우 짧게 표시됩니다. browser.actions().mouseMove(pagesMenuBtn).perform()
이 원인입니다.커서가 하위 메뉴를 표시하는 데 필요한 버튼 위로 마우스를 가져 가면 하위 메뉴 요소가 완전히로드되기 전에 클릭이 수행 된 것처럼 보입니다 (요소에 애니메이션이 일부 있음 - '보기가 흐리게 보임'),하지만 요소가 완전히로드되기 전에 클릭이 발생하고 있으므로 제대로 등록되지 않았을 것으로 생각됩니다.
하위 메뉴 항목을 클릭하기 전에 테스트가 애니메이션을 완료 할 때까지 기다려야하므로 클릭이 요소와 올바르게 등록됩니다.
가 나는 라인이 일을 시도 :
browser.wait(EC.visibilityOf(pageBrowserBtn), 12000).then(
EC.visibilityOf(...)
조건 요소가 아니라 완전히 불투명 때까지 기다리지 않고, 가시가 시작 되 자마자 만났지만 그
라인이 실제로는이 시점에서 수행 할 수 없습니다. 아마도이 요소는 클릭 한 지점에서 '완전히'볼 수 없기 때문일 수 있습니다.
요소를 클릭하기 전에 테스트 (애니메이션을 CSS를 사용하여 구현 됨)가 완료 될 때까지 기다릴 수 있습니까?
내가 애니메이션에 대해 아무것도에 대한 Protractor API에보고했지만, 단지 기능 allowAnimations()
을 제공 할 것 ...
편집
이 요소의 애니메이션은 CSS에서 설정
/* Animation for moving lists in configuration */
.list-fade.ng-enter,
.list-fade-leave.ng-leave {
-webkit-transition: all linear 0.5s;
transition: all linear 0.5s;
}
즉, 커서가 상위 요소 위로 이동하면 요소를 표시하는 데 0.5 초가 걸릴 수 있습니다.
browser.actions().mouseMove(pagesMenuBtn).perform().then(
//expect(pageTagBrowserBtn.isDisplayed()).toBeTruthy();
browser.wait(EC.visibilityOf(pageTagBrowserBtn), 12000).then(
browser.wait(10000).then(
pageTagBrowserBtn.click().then(
function() {
console.log("Tag Browser menu button clicked");
:
나는 내 테스트가 완전히 I가 클릭을 보내는 내 테스트의 부분을 업데이트 - 그것을 클릭하기 전에 표시 할 요소를 기다릴 것이다 그래야,
browser.wait()
에 전화를 추가하는 시도
필자는 요소를로드 할 충분한 시간을 확실히주기 위해이 시점에서 10 초 동안 기다리라고 말했지만 (CSS에 따르면, 표시되는 데는 0.5 초 밖에 걸리지 않음), 어떤 이유로, 내 테스트 같은 시간 초과 문제로 인해 여전히 실패하고 있습니다.
누구든지 의견이 있으십니까?