Background
We are in era the of Web, Mobility and AI. Days are gone where we used to think Javascript is just for client side validation check before submitting web forms. Thanks to ECMAScript5 and above which advanced javascript language way forward. Many Enterprises across the world already building applications using lot of opensource Javascript technologies.
Automating the Testing of any web application is becoming challenging and critical for the business. Challenge is in terms of manage and maintain test hygiene throughout the application life cycle and overall product quality. The ideal behavior of any test automation is to be able to integrate as part of CI and CD (Continuous Deployment) build and be able to run without manual test run effort and publish test results with code coverage metrics.
There are many different frameworks available in the market to solve automation problem. To name few:
- CodedUI - Browser based test automation suite on .net
- Selenium - Browser based test automation suite comes with WebDriver and IDE.
- Jasmin - is a behavior-driven JavaScript framework for testing JavaScript code
- Protractor - An automated testing framework for testing AngularJs applications in the browser.
- CasperJS - An open-source navigation scripting and testing utility written in JavaScript for the PhantomJS WebKit headless browser
- NemoJS - is an open-source, Node.js automation framework that was developed by PayPal
- ..
Some of these frameworks like CodedUI,Selenium needs active browser instance to run test suite. And this can be a challenging because of below reasons
- The VM that runs the testsuite might take much memory intensive operations and might require more time to finish the testcase executions.
- Also, browser rendering adds more time to overall test execution.
What is CasperJS?
CasperJS is testing framework build on top of Headless browsers such as PhantomJS.
WHY USE CASPERJS
- High speed, low resources
- No need for VMs or external
services
- Don't have to worry about
cache/cookies
- parallel test execution
PHANTOMJS
*PhantomJS is not a test
framework. It's Browser*
Headless version of Webkit
- Window-less, commandline web
browser
- Programmable through Javascript
- Supports WebDriver out of the
box
Get --
> Install Node.js > npm install -g phantomjs
Use --
ex:
var page = require('webpage').create(); page.open('https://bing.com/', function(status){ console.log(page.content); phantom.exit(); });
What else can i do?
- inject/execute arbitary JS code
- perform actions
- take screenshots
- monitor performance
CASPER TEST API
API & test framework layer
on top of PhantomJS
Provides all the things
required:
clicking, typing, waiting, assertion, etc.,.
Events, screenshots (even
specific elements) & more
-- GET
> install nodejs > npm install -g casperjs
-- USE
General Mode:
var casper = require('casper').create(); casper.start('https://jdn-int.corp.microsoft.com/', function() { this.echo(this.getTitle()); }); ... casper.thenOpen('https://jdn-int.corp.microsoft.com/CustomerMaster/Account', function() { this.echo(this.getTitle()); }); casper.run(); > casperjs myscript.js
-- USE
Test Mode:
-------------
casper.test.begin(... casper.start('url', function{ }).run(function(){ test.done(); }) }) > casperjs test mytest.js
ORGANIZE TEST CODE
Cons
Debugging experience can be hard.
Resources
Casper API Documentation: http://docs.casperjs.org/en/latest/
PhantomJS: http://phantomjs.org/
Organizing Code: https://github.com/sandeeptalabathula/queen-casperjs_starter_kit
PhantomJS: http://phantomjs.org/
Organizing Code: https://github.com/sandeeptalabathula/queen-casperjs_starter_kit