lmiguelvargasf
lmiguelvargasf

Reputation: 69735

How to iterate using protractor?

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

Answers (1)

lmiguelvargasf
lmiguelvargasf

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

Related Questions