2016-08-31 77 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

當你解決getRowBasedOnName()的結果,這是一個ElementArrayFinder,你得到的元素的規則排列,其不具有all()方法。

你並不需要解決的getRowBasedOnName()在所有的結果 - 讓它成爲一個ElementArrayFinder,你可以鏈all()爲你的第二個樣品中:

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

換句話說,requiredRow不是ElementArrayFinder,但是row是。