2016-08-31 16 views
1

でそれを解決せずに作業の約束は、私のページオブジェクトコード以下分度器

this.getRowBasedOnName = function (name) { 
    return this.tableRows.filter(function (elem, index) { 
     return elem.element(by.className('ng-binding')).getText().then(function (text) { 
      return text.toUpperCase().substring(0, 1) === name.toUpperCase().substring(0, 1); 
     }); 
    }); 
}; 

上記の機能が

this.clickAllProductInProgramTypeBasedOnName = function (name) { 
    this.getRowBasedOnName(name).then(function (requiredRow) { 
     requiredRow.all(by.tagName('label')).get(1).click(); 
    }); 
}; 

が、上記である、別の関数内の同じページオブジェクトで呼び出されていますコードではコンソールにエラーが表示されるrequiredRow.allは関数ではありません

ただし、以下の場合は

this.clickAllProductInProgramTypeBasedOnName = function (name) { 
    var row = this.getRowBasedOnName(name) 
    row.all(by.tagName('label')).get(1).click(); 
}; 

これは問題なく動作し、必要な要素をクリックします。

しかしthis.getRowBasedOnName()関数は、それがその後、をuisng機能解決した後に使用することができなければならない約束を、返します。どうやってそれを変数に代入するだけで作業できますか?

+0

あなたのメソッド 'this.getRowBasedOnName(name)'は、Web要素( 'ElementArrayFinder')のメソッドで拡張された約束を返します。これらのメソッドの呼び出しは、新しい約束を連鎖させます。したがって、最初のケースでは約束事を処理しており、2番目では配列である約束の結果を処理しています。 –

答えて

2

あなたはElementArrayFinderあるgetRowBasedOnName()の結果を、解決するとき、あなたはall()メソッドを持っていない要素の規則的な配列を取得します。

あなたは全くgetRowBasedOnName()の結果を解決する必要はありません - それはあなたがあなたの第二のサンプルのようにall()と連鎖することができますElementArrayFinderなりましょう:、requiredRowは言い換えれば

var row = this.getRowBasedOnName(name); 
row.all(by.tagName('label')).get(1).click(); 

ではありませんElementArrayFinderであるが、rowである。