2017-05-13 15 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ブロック内のcontorlを保持し、アクションを完了できます。アクションが完了していない場合は、タイムアウトになります。

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..'); 
関連する問題