Organiccat
Organiccat

Reputation: 5651

Using Protractor to check for a value that is visible

I have a section of code that displays two different ways based on a condition. In both ways, there is a value that I want to check:

user.name

This is displayed on the page like

<span ng-show="showusername && something > 3">{{user.name}} (other stuff here)</span>
<span ng-show="showusername && something <= 3">{{user.name}}</span>

My problem is, this is used elsewhere on the page as well, and the protractor piece can't seem to find the binding if I use by.binding('user.name'), it finds multiple, and displays

Expected ''  to equal 'Joe Smith'

Upvotes: 1

Views: 53

Answers (1)

alecxe
alecxe

Reputation: 473833

You can filter out the visible elements only:

var visibleUserNames = element.all(by.binding("user.name")).filter(function (elm) {
    return elm.isDisplayed().then(function (isDisplayed) {
         return isDisplayed;
    });
});
expect(visibleUserNames.count()).toEqual(1);
expect(visibleUserNames.first().getText()).toEqual("Joe Smith");

Upvotes: 2

Related Questions