Skip to content

Instantly share code, notes, and snippets.

@javierarques
Last active December 9, 2025 08:09
Show Gist options
  • Select an option

  • Save javierarques/0c4c817d6c77b0877fda to your computer and use it in GitHub Desktop.

Select an option

Save javierarques/0c4c817d6c77b0877fda to your computer and use it in GitHub Desktop.
Protractor API Cheatsheet

Protractor API

http://angular.github.io/protractor/#/api

Note: Most commands return promises, so you only resolve their values through using jasmine expect API or using .then(function()) structure

Based on this post: https://spagettikoodi.wordpress.com/2015/01/14/angular-testing-cheat-sheet/ by @crystoll

Control browser

browser.get('yoururl'); // Load address, can also use '#yourpage'

browser.navigate().back();

browser.navigate().forward();

browser.sleep(10000); // if your test is outrunning the browser

browser.waitForAngular(); // if your test is outrunning the browser

browser.getLocationAbsUrl() // get the current address

browser.ignoreSynchronization = true; // If true, Protractor will not attempt to synchronize with the page before performing actions

   

Here's a trick how to wait for something to become present/visible:

browser.wait(function() {
   return element(by.id('create')).isPresent();
}, 5000);
   
element(by.id('create')).click();

Check visibility

element(by.id('create')).isPresent() // Be careful with this: element is often present while it's not displayed...

element(by.id('create')).isEnabled() //Enabled/disabled, as in ng-disabled...

element(by.id('create')).isDisplayed() //Is element currently visible/displayed?

Find an element by id, model, binding, ...

element(by.id('user_name'))

element(by.css('#myItem'))

element(by.model('person.name')) // refers to ng-model directive

element(by.binding('person.concatName')); // refers to ng-bind directive

element(by.textarea('person.extraDetails'));

element (by.input( 'username' ));

element (by.input( 'username' )).clear();

element(by.buttonText('Save'));

element(by.partialButtonText('Save'));

element(by.linkText('Save'));

element(by.partialLinkText('Save'));

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

var dog = element(by.cssContainingText('.pet', 'Dog'));

var allOptions = element.all(by.options('c c in colors')); //When ng-options is used with selectbox

Find collection of elements by css, repeater, xpath..

var list = element.all(by.css('.items));

var list2 = element.all(by.repeater('personhome.results'));

var list3 = element.all(by.xpath('//div

expect(list.count()).toBe(3);

expect(list.get(0).getText()).toBe('First’)

expect(list.get(1).getText()).toBe('Second’)

expect(list.first().getText()).toBe('First’)

expect(list.last().getText()).toBe('Last’)

Send keystrokes, clear

element(by.id('user_name').sendKeys("user1");

sendKeys(protractor.Key.ENTER);

sendKeys(protractor.Key.TAB);

element(by.id('user_name')).clear()

Position and size, also how to deal with promises:

element(by.id('item1')).getLocation().then(function(location) {
  var x = location.x;
  var y = location.y;
});

element(by.id('item1')).getSize().then(function(size) {
  var width = size.width;
  var height = size.height;
});

Jasmine Matchers

to(N­ot)­Be( null | true | false )
to(N­ot)­Equ­al( value )
to(N­ot)­Mat­ch( regex | string )
toBe­Def­ine­d()
toBe­Und­efi­ned()
toBe­Nul­l()
toBe­Tru­thy()
toBe­Fal­sy()
to(N­ot)­Con­tain( string )
toBe­Les­sTh­an( number )
toBe­Gre­ate­rTh­an( number )
toBe­NaN()
toBe­Clo­seTo( number, precision )
toTh­row()
@daominhdam
Copy link
Copy Markdown

Thanks you

@masashiyokoi
Copy link
Copy Markdown

Thank you very match.

@husseinkorly
Copy link
Copy Markdown

Thank you

@maldzi
Copy link
Copy Markdown

maldzi commented Dec 30, 2017

It's so useful, thank.

@SiddharthDivakaran
Copy link
Copy Markdown

It's really useful thanks.

@chitranshamahor
Copy link
Copy Markdown

Great !!

@akshayraikar1
Copy link
Copy Markdown

Thanks a lot, much appreciated.

@flashjpr
Copy link
Copy Markdown

flashjpr commented Aug 7, 2018

Kudos!

@amandarfernandes
Copy link
Copy Markdown

Nice! Thank you

@vermin-scripts
Copy link
Copy Markdown

Thanks This helped a-lot

@Umesh2Patel
Copy link
Copy Markdown

Thank you. This is very helpful.

@nitin1tester
Copy link
Copy Markdown

Excellent! time-saving... Thanks

@prajaktashah
Copy link
Copy Markdown

Awesome.....Time saving..Thanks a ton.

@manish-kumar0525
Copy link
Copy Markdown

Great resource, concise and to the point.Thank you

@vmmartinezlona
Copy link
Copy Markdown

Thanks!!!!

@shamir456
Copy link
Copy Markdown

Very helpful

@Vicropht
Copy link
Copy Markdown

+1

@HubertArciszewski95
Copy link
Copy Markdown

Wow great, this is what I was looking for :)

@josejdlp
Copy link
Copy Markdown

josejdlp commented Oct 1, 2019

Thanks +1

@sunilangadi2
Copy link
Copy Markdown

Thanks a lot..!!!

@ramusarithak
Copy link
Copy Markdown

ramusarithak commented Mar 10, 2021

"" superrrrrr and very helpful ""

@nvn27
Copy link
Copy Markdown

nvn27 commented Mar 27, 2021

Thank you, much appreciated...!!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment