2017-03-14 13 views
1

リストビューから商品のインデックスを検索しようとしています。この機能を使用しているインデックスを調べるにはelement.allが解決されるのを待つ方法は?

function restFunction(appName) { 
    var indexForItem = 0; 
    var a = element.all(by.repeater("app in itemList").column("app.itemName")).each(function (element, index) { 
      element.getText().then(function (name) { 
       console.log("Name is " + name); 
       if (name == "sam") { 
        indexForItem = index + 1; 
        console.log("Ïndex is " + indexForItem); 
        a = index; 
       } 
      }); 
     }); 

     return a; 
    } 

上記の約束がどのように解決されるのを待つことができますか?今すぐ私のrestFunctionを呼び出すとき私は保留状態で常に約束を得ます

答えて

0

あなたのコードは、特に戻り値が正しくないように見えます。関数呼び出し - element.all(locator).each(eachFunction)を返すと、何も解決されないPromiseが返されます。文書hereを確認してください。

戻り

は! 機能がすべてElementFindersで呼び出されたときに解決します約束をwebdriver.promise.Promise。約束は nullに解決されます。あなたが再割り当てされているが、コール内後で値を、モードが非同期であるため、

、それは再割り当てまで待つことはありません。

あなたは直接

function restFunction(appName) { 
    return element.all(by.repeater("app in itemList").column("app.itemName")).each(function (element, index) { 
     return element.getText().then(function (name) { 
      if (name === "sam") { 
       return (index+1); 
      } 
     }); 
    }); 
} 

インデックスを返すためにそれを変更する必要があるそして、あなたは関数を呼び出すとき - あなたは約束

restFunction('').then(function _resolvePromiseOfCall(value){ 
    console.log('value') 
}) 
を解決する必要が
関連する問題