radio_head
radio_head

Reputation: 1375

Protractor- ElementFinder returning unexpected values

I am writing a protractor test case to compare the name(s) of the displayed data is same as the searched name.

Even though my test case works fine, I am not able to understand what is happening. Because when i expect the name to compare, it compares as expected, but when i print the elementFinder's(rowData)(i have attached the output screen shot here) value in console.log, it show a huge list of some values which i am not able to understand?

PS: I am a newbie to protractor`

This is the testCase:

it('should show proper data for given last name', function () {
            var searchValue='manning';
            searchBox.sendKeys(searchValue);
            search.click();
            element.all(by.binding('row.loanNumber')).count().then(function(value) {
                var loanCount = value;
                for (var i = 0; i < loanCount; i++) {
                    var rowData = element.all(by.binding('row.borrowerName')).get(i).getText();
                    expect(rowData).toMatch(searchValue.toUpperCase()); 
                    console.log(rowData,'*****',searchValue.toUpperCase());
                    
                }
            });
        });`

And give me valuable suggestions about my style of code

Upvotes: 1

Views: 631

Answers (1)

martin770
martin770

Reputation: 1288

rowData is a promise (not a value), so when you console.log it, you get the promise object

Protractor patches Jasmine to automatically resolve promises within the expect(), so that's how it knows to resolve the value and compare to the expected result.

If you want to console.log the value, you need to resolve the promise with .then() to get the value.

rowData.then(function(rowDataText) { console.log(rowDataText); )}

This is pretty much everyone's first question when they start using protractor. You will want to learn how promises work if you want a good understanding of how to manipulate them.

Upvotes: 2

Related Questions