Developing an Application? Use Protractor to Test it!

November 9, 2016

Today, Rich Internet Applications developed on JavaScript (AngularJS) – a framework extending the functionality of HTML and used to quick launch applications – are becoming increasingly popular in web application development. Protractor is an automation framework developed to support end-to-end (E2E) testing and unit testing for AngularJS and non-AngularJS applications as a user would run the app in a real browser.

The end-to-end UI testing method tests all components of how an application works from start to finish and from the perspective of the user. End-to-end testing or functional testing:

  • Communicates backend functionality with frontend per design
  • Validates an application from the user perspective
  • Achieves functional integration and system testing
  • Provides increased confidence before releasing an app to production

With the large number of pages and interactions in most modern applications, manual end-to-end testing becomes extremely time consuming, resulting in the need for test automation. Test automation not only speeds up the process, but it also finds bugs in the early stages of development and supports multiple executions faster in comparison to manual testing.

Based on our search for a functional test automation framework, we recommend using Protractor, an open-source framework designed to verify the health of AngularJS applications, which launches tests against AUT (application under test), and runs them in a real browser as a user would do it. Protractor runs on top of the Selenium WebDriver and works as a solution integrator, combining powerful tools and technologies such as NodeJS, Jasmine, Cucumber, and Mocha. In addition, Protractor provides new locator strategies and functions that are very helpful to automate AngularJS applications, like waitForAngular, By.binding, By.repeater, By.textarea, By.model, WebElement.all, WebElement.evaluate, etc. To achieve end-to-end automation, businesses will need to build a wrapper on top of the Protractor framework to communicate with non-web applications, such as mobile or Thick Client apps.

Why should companies use the Protractor framework?

  • It’s effective and efficient. Test scripts and data are loosely coupled and page objects are separate from the page modules, resulting in an increased test development pace.
  • It’s scalable. Protractor reduces code redundancy and has a large scope of reusability.
  • It’s easy to maintain. Changes can be adoptable with minimal efforts, and test data and page object property changes do not impact the code.   
  • It’s test data is configurable. Protractor allows tagging of test suits, controlling test data sets, skip data set iteration, and configuration at the feature level, test scenario level, and test step level.

If your business is already using the Protractor framework, keep these best practices in mind to help you write robust tests:  

  • Avoid using potential CSS attributes, mainly IDs and Classes.
  • Take advantage of Angular JS attributes.
  • Use the Page Object Model to organize elements and write functions to perform actions on the page.
  • Think of every test case as an end-to-end scenario in your spec file with pre/post conditions using Jasmine BeforEach/BeforAll/AfterEach/AfterAll statements.
  • Avoid explicit waits to handle Page Loading/Element Loading/Element Visible, etc.
  • Loosely couple test data and test specs.
  • Use the NodeJS DataProvider module for achieving data-driven tests.

Interested in learning more about end-to-end testing and how EPAM can help you implement the Protractor framework for testing your applications and websites? Contact us.