Reputation: 69735
I am having trouble when I try to iterate using protractor. This is my code:
var accountNumber = 2;
var accountsInfo = [{name: 'Hugo Marin', bank: 'Banco Capital', accountNumber: '43543'},
{name: 'Hugo Marin', bank: 'Banco de Loja', accountNumber: '12345'}];
var accounts = element.all(by.repeater('bankAccount in bankPersonCtrl.otherBanksAccounts'));
expect(accounts.count()).toBe(accountNumber);
for (var i = 0; i < accountNumber; i++) {
accounts.get(i).getText().then(function(text) {
text = text.split('\n');
var name = text[0];
var bank = text[1];
var accountNumber = text[2];
console.log('i is: ' + i);
expect(name).toEqual(accountsInfo[i].name);
expect(bank).toEqual(accountsInfo[i].bank);
expect(accountNumber).toEqual(accountsInfo[i].accountNumber);
});
}
I think the logic is correct, but I am getting
Failed: Cannot read property 'name' of undefined
In addition, instead of getting in the console.log('i is:' + i);
==> i is: 0
, I am getting i is: 2
.
What I tried to do is get each element in a repeater, so I can compare the text they have.
Upvotes: 1
Views: 125
Reputation: 69735
After reading the protractor documentation, this solved my problem:
var accountNumber = 2;
var accountsInfo = [{name: 'Hugo Marin', bank: 'Banco Capital', accountNumber: '43543'},
{name: 'Hugo Marin', bank: 'Banco de Loja', accountNumber: '12345'}];
var accounts = element.all(by.repeater('bankAccount in bankPersonCtrl.otherBanksAccounts'));
expect(accounts.count()).toBe(accountNumber);
accounts.each( function(element, index) {
element.getText().then(function(text) {
text = text.split('\n');
expect(text[0]).toEqual(accountsInfo[index].name);
expect(text[1]).toEqual(accountsInfo[index].bank);
expect(text[2]).toEqual(accountsInfo[index].accountNumber);
});
});
Using each was the solution because I can have the index for each element.
Upvotes: 2