Lloyd Banks
Lloyd Banks

Reputation: 36648

AngularJS Protractor - Finding an Element on a Page Using Ng-Click Binding

I have a button on a page that looks like:

<button ng-click="myFunction()" ng-show="flag">
    Submit
</button>

The element has no ID.

Is there a way to find this element using the function bound to Ng-Click? Or do I have to assign an ID to this element to locate it using Jasmine / Protractor?

Upvotes: 34

Views: 50367

Answers (4)

redOctober13
redOctober13

Reputation: 3974

Rather than adding an ID, which I don't like to do just to provide a test hook, I would add type="submit" to the button and then you can search By.css('[type="submit"]')

Upvotes: 0

Nguyen Vu Hoang
Nguyen Vu Hoang

Reputation: 1570

If you want to use ng-show, you could try this:

element(by.Css("button[ng-show]")); // Get element with tag < button > and has ng-show attribute

or:

element(by.Css("button[ng-show*=flag]")); // Get element with tag < button > and has ng-show attribute which contains word flag

Upvotes: 1

Ted Warner
Ted Warner

Reputation: 711

Just tested this and it works:

element(by.css('[ng-click="myFunction()"]'))

Upvotes: 71

Lloyd Banks
Lloyd Banks

Reputation: 36648

I went through the Protractor API and didn't find anything related to finding an element through ng-click. I did find

element(by.buttonText("Submit"));

Not quite the same, but does the job in my environment.

Upvotes: 33

Related Questions