2015-09-15 102 views
1

這個問題有兩個目的,試圖解決這個特定的錯誤,並試圖瞭解量角器的最佳做法。所以,我有以下的故障代碼進行測試:量角器 - 類型錯誤:未定義不是函數

var newRow = element.all(by.repeater("employee in ec.employees")).last(); 

newRow.then(function(row) { 
    row.findElements(by.tagName("td")).then(function(cells) { 
     expect(cells.get(0).getText()).toBe("9988776655000"); 
     expect(cells.get(1).getText()).toBe("Test name"); 
     expect(cells.get(2).getText()).toBe("Test surname"); 
    }); 
}); 

原因:

TypeError: Undefined is not a function

和它所指向的代碼newRow.then(...)第二排。

我有關HTML:

<tr ng-repeat="employee in ec.employees"> 
    <td>{{employee.jmbg}}</td> 
    <td>{{employee.name}}</td> 
    <td>{{employee.surname}}</td> 
</tr> 

現在,我已經看到了幾十個帖子對SO這個錯誤,但都是具體的,只要我能找到有沒有一個類似於我案件。 因此,除了爲什麼我的代碼無法正常工作的問題之外,我想問的是使用ElementFinder.findElement/s函數還是有其他選擇?

回答

2

element.all(...).last()返回ElementFinder,所以你不能像承諾那樣使用它。更改代碼以直接在newRow變量上查找元素。這是如何 -

var newRow = element.all(by.repeater("employee in ec.employees")).last(); 

newRow.findElements(by.tagName("td")).then(function(cells) { 
    expect(cells.get(0).getText()).toBe("9988776655000"); 
    expect(cells.get(1).getText()).toBe("Test name"); 
    expect(cells.get(2).getText()).toBe("Test surname"); 
}); 

希望這會有所幫助。

+0

這是問題的一部分。就我所能找到的網上「findElements」已被棄用(在我的情況下不起作用),所以我不得不使用「全部」。 – user2352164

2

既然你在標籤中使用綁定,我會建議尋找那些而不是自己抓取行。這樣,如果您在將來更改行的順序或添加更多的行,測試不太可能中斷。你可以試試下面的:

var newRow = element.all(by.repeater("employee in ec.employees")).last(); 

newRow.then(function(row) { 
    expect(row.element(by.binding('employee.jmbg'))).toBe('9988776655000'); 
    expect(row.element(by.binding('employee.name'))).toBe('Test name'); 
    expect(row.element(by.binding('employee.surname'))).toBe('Test surname'); 
}); 

如果你有一個角指令,裝訂,中繼器,型號或者你可以針對你應該嘗試利用它們在你的選擇,使您的測試更可靠的一個特定的CSS路徑。我還會考慮爲您的測試創建PageObjects,以減少可能出現在測試中的重複代碼的數量。

相關問題