2017-12-28 31 views
1

각도기로 JavaScript를 사용하여 작성한 자동화 된 테스트 스크립트를 실행하려고 할 때마다이 두 함수가 실제로 서로 독립적으로 실행된다는 것을 알 수 있습니다. 예 :각도기 테스트로 JavaScript를 순차적으로 실행하지 않습니다

it("Validation of ND account", function() { 

    // I logged in, and navigated to the page I need 
    // And this is where is gets intresting 

    console.log("\n"); 
    console.log("Before getting number of users"); 
    var numberOfUsers = element(by.xpath('//div[@viewid="userList"]//div[@class="results-count ng-binding"]')).getText().then(function(text) { 
     console.log(text); 
    }); 
    console.log("After getting number of users"); 

// for (i=1, i<numberOfUsers, i++) { 
//  console.log(i); 
// } 

    }); 

내가 같은 순서로 내 로그를 얻을 수 있다고 가정 - 이전 번호와 후를하지만, (그것을로드하는 데 시간이 더 걸리기 때문에) 처음에는 다음 각도기를 JS을 얻을합니다. 이 콘솔 출력이 스크립트의 실행 결과입니다 말했다와

Started 
[32m.[0m 

Before getting number of users 
After getting number of users 
161 
[32m.[0m 

2 specs, 0 failures 

을, 내 문제는 내가 페이지를 열려면, 요소 텍스트를 얻을 다음에 대한 실행 (그것으로 어떤 작업을 수행 할 것입니다 루프가 주석 처리됩니다), 페이지를로드하기 전에 미해결 된 약속을 반환하기 때문에이 작업을 수행 할 수 없습니다. 좀 더 정확히 말하면 페이지를 열기 전에 페이지가로드되기 바로 전에 페이지의 요소에 따라 루프가 실행됩니다. 요소가 아직 나타나지 않았고 프로그램에 여전히 텍스트 특성이 없으므로 루프가 실패합니다. 그래서 여기에 의문이 있습니다 : 스크립트 시퀀스를 엄격하게 준수하는 것입니다 (JS 명령을 실행하기 전에 분도기 명령을 작성한 후 JS 스크립트가 JS 타임 아웃 또는 대기 함수없이 작성되도록 허용 할 수 있습니까?).

답변

0

Promises을 이해하고 콜백을 사용하여 순차적으로 작동하도록해야합니다.

이 특별한 경우를 들어, 계속하기 위해 테스트 numberOfUsers 기다릴 수 없다, 당신은 콜백 함수 내에서 계속해야합니다 : 없습니다 아직

console.log("\n"); 
console.log("Before getting number of users"); 
element(by.xpath('//div[@viewid="userList"]//div[@class="results-count ng-binding"]')).getText().then(function(text) { 
    console.log(text); 
    // continue working here with "text" 
    console.log("After getting number of users"); 
}); 
+0

을 내가 뭘 완료. 이제이 문제에 직면하게 될 것입니다. https://stackoverflow.com/questions/48016927/protractor-script-doesnt-work-properly 아마도 같은 이유로 –

관련 문제