2017-05-13 3 views
0

Webdriver.io에서 실행 흐름을 올바르게 처리하는 방법을 이해할 수 없습니다.Webdriver IO가 모든 명령을 순차적으로 실행합니다.

은 여기 내 기능

checkOrderStatus(info, callback) { 
    let browserClient = this._webDriverClient; 
    // Make order flow 
    browserClient.init() 
     .url("http://localhost") 
     .selectByVisibleText("products", "MacBook") 
     .setValue("input[name='first_name']", info.name) 
     .setValue("input[name='address']", info.address) 
     .click("button[name='confirm']"); 
    let errorElements = browserClient.element('.error'); 
    if (errorElements.length > 0) { 
     callback.onError("Error"); 
    } 
    else { 
     let successElements = browserClient.element(".success"); 
     if (successElements.length > 0) { 
      callback.onSuccess("Success"); 
     } 
    } 
    browserClient.end(); 
} 

그러나 browserClient.element 반환 status : pending입니다. 약속 체인과 같은 것이 필요합니다. 예외가 없으면 모든 명령문이 실행될 때까지 전체 체인이 완료되지 않습니다.

제공된 예제는 실제로 간단합니다. 요소를 찾은 후에도 더 많은 작업이있을 수 있습니다.

누군가가이 체인을 약속 체인과 같이 순차적으로 처리하는 방법을 제안 할 수 있습니까?

나는 도움을 주셔서 감사합니다.

답변

1

다음과 같이 할 수 있습니다. browser.waitUnit을 사용하여 browser.waitUnit 블록 내의 컨트롤을 잡고 작업을 완료 할 수 있습니다. 작업이 완료되지 않으면 시간 초과가 발생합니다!

browser.url("http://localhost"); 

browser.waitUntil(function() { 
    browser.isVisible(requiredelement).then(function(isVisible){ 
    if(isVisible){ 
     browser.selectByVisibleText("products", "MacBook") 
       .then(function() { 
         browser.setValue("input[name='first_name']", info.name) 
         browser.setValue("input[name='address']", info.address) 
       }).then(function(){ 
         browser.click("button[name='confirm']"); 
     }); 
    } 
    }); 
}, 5000, 'time out ! element is not visible..');