2015-09-25 53 views
2

我想從第二列值中選擇表格中的特定元素(我刪除了呈現的空白處),並且在找到該元素後,我想單擊它(回報是真實的)。我試過這個,但它沒有點擊它,但只是找到了元素。TypeError:無法調用未定義的方法'點擊'

該字段我想選擇HTML代碼如下:

<table ng-table="tableParams" id="Panel" class="tbl-option-list" template-pagination="directives/controls/Pager/Pager.html"> 
    <caption translate>Orders</caption> 
    <tr id="Panel"> 
     <!-- 1 --> 
     <th class="fixed-width-glyphicon"></th> 
     <!-- 2 --> 
     <th translate>Identifier</th> 
    </tr> 
     <tr ng-repeat="item in $data track by $index" ng-class="{'active-bg': order.$selected}" ng-click="changeSelection(order, getRowActions(order))"> 
     <!-- 1 --> 
     <td class="fixed-width-glyphicon"> 
      <div class="fixed-width-glyphicon"> 
       {{item.priority.toUpperCase()[0]}} 
      </div> 
     </td> 
     <!-- 2 --> 
     <td>{{item.identifierCode}}</td> 
    </tr> 
</table> 

從量角器的選擇命令是:

var deferred = protractorData.p.promise.defer(); 
element.all(by.repeater('item in $data track by $index')).filter(function(row) { 
    row.getText().then(function(txt) { 
     txt = txt.replace(/\s/g, ''); 
     var found = txt.split('ID0001'); 
     return found.length > 1; 
    }); 
}).then(function(elem) { 
     deferred.fulfill(elem[0]); 
    }); 
    return deferred.promise; 
} 

我收到以下錯誤:

TypeError: Cannot call method 'click' of undefined.

+0

能否請您添加與您的代碼的jsfiddle它會很容易調試;)在您嘗試單擊該元素似乎第一種觀點不被顯示。 – Radu

+0

@Radu,Protractor是一個node.js模塊,它不會在JSFiddle中運行。 –

+1

你可以添加你的代碼來點擊元素嗎?我想你是試圖點擊返回的承諾,而不是返回的元素。 –

回答

3

似乎元素沒有被返回被點擊。試試下面的例子來點擊,看看它是否工作正確的過濾功能,而不是返回使用承諾的元素 -

element.all(by.repeater('item in $data track by $index')).filter(function(row) { 
    //return found element 
}).then(function(elem) { 
    elem[0].click(); //click it here 
}); 

或者在下面的方式返回元素,然後點擊它在您的測試規範。以下是如何 -

var clickElement = element.all(by.repeater('item in $data track by $index')).filter(function(row) { 
    //return found element 
}).then(function(elem) { 
    return elem[0]; //return the element 
}); 
return protractor.promise.fulfilled(clickElement); 

希望它有幫助。

0

爲什麼你不只是返回元素?沒有必要在這裏promise.defered:

return element.all(by.repeater('item in $data track by $index')).filter(function(row) { 
    row.getText().then(function(txt) { 
    txt = txt.replace(/\s/g, ''); 
    var found = txt.split('ID0001'); 
    return found.length > 1; 
}); 
}).then(function(elem) { 
    return elem[0]; 
}); 

注意在開始添加的回報,這樣,您是return elem[0];

0

的.filter函數返回一個承諾應該返回一個值。 在你的榜樣,我相信它應該是(在第三行):

return row.getText().then(function(txt) { 
相關問題