Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use protractor to check if an element is visible?

I'm trying to test if an element is visible using protractor. Here's what the element looks like:

<i class="icon-spinner icon-spin ng-hide" ng-show="saving"></i> 

When in the chrome console, I can use this jQuery selector to test if the element is visible:

$('[ng-show=saving].icon-spin') [ <i class=​"icon-spinner icon-spin ng-hide" ng-show=​"saving">​</i>​ ] > $('[ng-show=saving].icon-spin:visible') [] 

However, when I try to do the same in protractor, I get this error at runtime:

InvalidElementStateError:  invalid element state: Failed to execute 'querySelectorAll' on 'Document':  '[ng-show=saving].icon-spin:visible' is not a valid selector. 

Why is this not valid? How can I check for visibility using protractor?

like image 378
limp_chimp Avatar asked Apr 03 '14 22:04

limp_chimp


People also ask

How do you know if a element is visible with a protractor?

isPresent()). toBe(true); And to check if element does not exist we expect it to be false. It returns true if there are any elements present that match the finder.

Is element present in protractor?

In protractor, there are, basically, 3 ways to check if an element is present: var elm = element(by.id("myid")); browser. isElementPresent(elm);

How do you compare text in a protractor?

Another way is to schedule the comparison at the protractor control flow so it will be executed after all values are available. var oldValue,newValue; element(by.id('foundNumber')). getText(). then(function(text){oldValue=text}) element(by.


1 Answers

This should do it:

expect($('[ng-show=saving].icon-spin').isDisplayed()).toBe(true); 

Remember protractor's $ isn't jQuery and :visible is not yet a part of available CSS selectors + pseudo-selectors

More info at https://stackoverflow.com/a/13388700/511069

like image 166
Leo Gallucci Avatar answered Sep 25 '22 08:09

Leo Gallucci