by Dejan Toteff
How to build faster
e2e tests with
Protractor
● E2E testing framework
● Developed by Google
● Created especially for Angular
applications
● Can be used with non Angular sites as
well
What is Protractor?
● Continuous integration
● Integration tests
● Test Driven Development
Why we need E2E tests?
● They are slow to write
● Debugging is not a straightforward
process
● Short life cycle without update
What are the main issues
with writing e2e tests?
● Well-documented
● Integrated with headless and regular
browsers
● Easy to set up
● Very powerful API
What are the pros of
Protractor?
● It is not build for complex user
interactions
● Works at its best only with Chrome
● It doesn’t work well with nested
promises
What are the cons of
Protractor?
Time for some example code
● Make a habit to use element.all(by...).
count() to be sure that you create most
suitable element selector.
Protractor tips
● Expect false errors. To confirm an error,
run the tests under alternative OS
Protractor tips
● Beware of the async nature of
Protractor.
● If something doesn't work as expected
go Protractor native, i.e. using .then()
Protractor tips
● Don't abstract the code directly to the
PageObject. Often this abstraction lead
to errors.
Protractor tips
● Other possible issue is when the
element is not in the visible part of the
browser’s screen.
Protractor tips
● Avoid use of browser.sleep() right after
browser.waitForAngular()
Protractor tips
● If you stumble on an error, that the
element you are clicking on is not
attached to the document, that means
that this is not a testable scenario
Protractor tips
● Once you set the browser size, it persist
in your tests until the next browser.
setSize() declaration
Protractor tips
● Popups and animation can temporary
disable Protractor.
Protractor tips
● The behaviour of .then() method of
Protractor’s .map(), .each(), .filter() can
be weird.
Protractor tips
● One falsy selection can ruin all the tests.
Protractor is hard to debug mainly
because in such occasions
Protractor tips
● To make scroll down work, first you
need to focus the to the "window" by
clicking on any element within the
window.
Protractor tips
● Make all your clicks statement either
inside the tests, or in the PageObject.
Protractor tips
● https://github.com/lkrnac/primediser/tree/blog-2014-04-05-
measuring-code-coverage-by-protractor
● https://github.com/bennyhat/protractor-istanbul-plugin
● http://lkrnac.net/blog/2014/04/measuring-code-coverage-by-
protractor/
Walk the extra mile
https://github.
com/selfrefactor/Protractor-testing-
patterns
Shortlink: j.mp/endToEnd
Most of slides of this
presentation are based on:
Thank you
for your
attention
Protractor
testing is
actually
easy

Insights on Protractor testing