Sharing (less) Pain of using Protractor & WebDriver

28
SHARING (LESS) PAIN – PROTRACTOR & WEBDRIVER Anand Bagmar Software Quality Evangelist

Transcript of Sharing (less) Pain of using Protractor & WebDriver

Page 1: Sharing (less) Pain of using Protractor & WebDriver

SHARING (LESS) PAIN – PROTRACTOR & WEBDRIVER

Anand Bagmar Software Quality Evangelist

Page 2: Sharing (less) Pain of using Protractor & WebDriver

@BagmarAnand about.me/anand.bagmar

ABOUT ME

Page 3: Sharing (less) Pain of using Protractor & WebDriver

Case Study

Page 4: Sharing (less) Pain of using Protractor & WebDriver

DOMAIN

Page 5: Sharing (less) Pain of using Protractor & WebDriver

USER BASE

Page 6: Sharing (less) Pain of using Protractor & WebDriver

USAGE

Page 7: Sharing (less) Pain of using Protractor & WebDriver

SINGLE PAGE, MULTI-TENANT APPLICATION

Shared services

Page 8: Sharing (less) Pain of using Protractor & WebDriver

TEAM OWNS QUALITY

Testing ≠ Testers

Quality is a Team Responsibility

Page 9: Sharing (less) Pain of using Protractor & WebDriver

Unit (JavaScript)

Integration

UI

Exploratory

Performance

TEST PYRAMID

Page 10: Sharing (less) Pain of using Protractor & WebDriver

OPTIONS LOOKED AT

q WebDriver-Java

q Cucumber-JVM / Cucumber-Ruby

q WebDriver-JS

q Protractor

Page 11: Sharing (less) Pain of using Protractor & WebDriver

Disclaimer

Page 12: Sharing (less) Pain of using Protractor & WebDriver

Challenges

Page 13: Sharing (less) Pain of using Protractor & WebDriver

CHALLENGES - JAVASCRIPT

What is Test Automation?

Synchronous, Step-by-Step execution

ASynchronous Callbacks & Promises!

Power of JavaScript?

Page 14: Sharing (less) Pain of using Protractor & WebDriver

CHALLENGES – PATH TO PRODUCTION

Local -  Mac OS

-  Vagrant (Open SuSe)

CI Environment -  Build

-  Unit Tests -  Integration

-  End-2-End (E2E) -  Performance

Sandbox / QA -  Exploratory

-  Demos -  Client-pre-setups

Production

Page 15: Sharing (less) Pain of using Protractor & WebDriver

CHALLENGES – BROWSER (& OS) SUPPORT

Browser / Driver Why? Challenges phantomJS Headless execution

-  easier for developers -  Seamless CI

integration

-  Officially not recommended by Protractor

Chrome -  End-user requirement

-  Excellent for development & testing

-  Certain elements “not visible” – though worked with Firefox

Firefox -  End-user requirement

-  Worked locally -  Worked in CI – in

headless (xvfb), but NOT for maps

-  Worked in headless mode (xvfb) in vagrant

Page 16: Sharing (less) Pain of using Protractor & WebDriver

CHALLENGES – BUILD TOOL INTEGRATION

Gulp-angular-protractor

Gulp-protractor

Protractor

Selenium-WebDriver

Gulp

Page 17: Sharing (less) Pain of using Protractor & WebDriver

CHALLENGES - ANGULAR

Type Example Angular Directives Ex: ng-repeat, ng-model Custom Directives Ex: third party libraries providing

multi-column select, Sliders for range, Charts

Working with non-Angular Ex: Login, Admin

Page 18: Sharing (less) Pain of using Protractor & WebDriver

CHALLENGES - DEBUGGING

Setting breakpoints while handling promises

Page 19: Sharing (less) Pain of using Protractor & WebDriver

CHALLENGES – MAPS (TYPES, INTERACTION, DETAILS)

Page 20: Sharing (less) Pain of using Protractor & WebDriver

Overcoming the Challenges

Page 21: Sharing (less) Pain of using Protractor & WebDriver

SOLUTIONS – SIMPLIFY BUILD TOOL INTEGRATION

Protractor

Selenium-WebDriver

Gulp

Page 22: Sharing (less) Pain of using Protractor & WebDriver

SOLUTIONS – DETERMINISTIC TEST DATA

q Same Test Data in all environments / tenants

q  Minimal Environment specific configuration

q  Intelligent ‘before’ & ‘after’ setups

Page 23: Sharing (less) Pain of using Protractor & WebDriver

SOLUTIONS – UTILITIES

Page functions -  Common behavior

-  Non-angular

Screenshots with counters, per spec

Unique output directory names

JS Console warnings & errors Map & Chart functions

CSV, Zip file loader

Modals & Alerts

File Upload

File Download

Head & Head-less execution

Configurations

Page 24: Sharing (less) Pain of using Protractor & WebDriver

SOLUTIONS - LEARN

•  JavaScript

•  Angular

•  Protractor

Page 25: Sharing (less) Pain of using Protractor & WebDriver

DID WE SOLVE ALL THE PROBLEMS?

JUST KIDDING!!! - Of course, NO!!

-  Maps, Use Soft-asserts (intelligently), phantomJS

-  Quick(er) root-cause analysis

-  Reports

-  Easier debugging

-  How many and where to put “assertions”?

-  Faster test execution

-  Parallel Test execution

-  Implement View tests (html specs)

YES!!!

Page 26: Sharing (less) Pain of using Protractor & WebDriver

OUR TAKEAWAYS FROM THIS PAIN & GAIN!

q  Choose tech-stack based on context

q  Experiment & Fail-Fast!

q  Proper Cost-Value evaluation

q  Manage Risk (what to automate – now / later, and what NOT to automate)

q  Keep learning & sharing – new and better solutions

q  Evolve

26

Page 27: Sharing (less) Pain of using Protractor & WebDriver

REFERENCES

Page Objects – Google - https://code.google.com/p/selenium/wiki/PageObjects

Page Objects – Martin Fowler - http://martinfowler.com/bliki/PageObject.html

Perils of Page-Object Pattern – Anand Bagmar - http://essenceoftesting.blogspot.in/2014/09/perils-of-page-object-pattern.html

Protractor – https://docs.angularjs.org/guide/e2e-testing, http://www.protractortest.org/#/

Learn Protractor for Angular – https://docs.angularjs.org/tutorial

Sample project – https://github.com/NikithaIyer/angular-phonecat-e2e

Page 28: Sharing (less) Pain of using Protractor & WebDriver

@BagmarAnand about.me/anand.bagmar

THANK YOU