Facebook
Twitter
LinkedIn
YouTube
GitHub
Hasan's Blog
  • Home
    • About me
  • Hashicorp
  • Ansible
  • CI/CD
  • DevOps

Minimise your development time by automating your redundant tasks using Nodejs (Gruntjs)

2017/09/10Hasan YousufCasperjs, CI/CD, Gruntjs
Place https://github.com/hasanyousuf/gruntjs_sample/blob/master/html/index.html file in your web server so it should be accessible using http://locahost:80

 

Package file (package.json)
[javascript]{
“name”: “testproject”,
“version”: “1.0.0”,
“description”: “Test project using casperjs”,
“main”: “index.js”,
“scripts”: {
“test”: “echo \”Error: no test specified\” && exit 1″
},
“keywords”: [
“Casperjs”,
“Gruntjs”,
“Test”,
“code”,
“management”
],
“author”: “Hasan Naqvi”,
“license”: “ISC”,
“devDependencies”: {
“grunt”: “^1.0.1”,
“grunt-add-comment”: “^1.1.6”,
“grunt-casperjs”: “^2.2.1”,
“grunt-contrib-clean”: “^1.1.0”,
“grunt-contrib-jshint”: “^1.1.0”,
“grunt-contrib-watch”: “^1.0.0”,
“grunt-jsbeautifier”: “^0.2.13”,
“grunt-jsdoc”: “^2.1.0”,
“ink-docstrap”: “^1.3.0”,
“jshint”: “^2.9.5”
}
}
[/javascript] Grunt file (Gruntfile.js)
[javascript]module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON(‘package.json’),
con: grunt.file.readJSON(‘conf.json’),
“casperjs”: {
options: {
//casperjsOptions: [‘–includes=test/lib/vars.js’, ‘–no-colors’, ‘–log-level=info’, ‘–verbose=false’, ‘–xunit=artifacts/log.xml’] casperjsOptions: [
‘–includes=< %= con.includeFiles %>‘,
‘–xunit=< %= con.logFile %>‘
] },
files: [‘< %= con.onlyTestFiles %>‘] },
“jshint”: {
files: [‘Gruntfile.js’, ‘< %= con.allJsInTest %>‘] },
“jsbeautifier”: {
src: [‘Gruntfile.js’, ‘conf.json’, ‘< %= con.allJsInTest %>‘] },
“watch”: {
options: {
dateFormat: function(time) {
grunt.log.writeln(‘The watch finished in ‘ + time + ‘ms at’ + (new Date()).toString());
grunt.log.writeln(‘Waiting for more changes…’);
},
livereload: true,
},
scripts: {
files: [‘Gruntfile.js’, ‘< %= con.allJsInTest %>‘],
tasks: [‘default’],
},
},
“jsdoc”: {
dist: {
src: [‘< %= con.allJsInTest %>‘, ‘README.md’],
options: {
destination: ‘< %= con.docs %>‘,
template: “node_modules/ink-docstrap/template”,
configure: “node_modules/ink-docstrap/template/jsdoc.conf.json”
}
}
},
clean: [‘artifacts’] });

grunt.loadNpmTasks(‘grunt-contrib-clean’);
grunt.loadNpmTasks(‘grunt-contrib-watch’);
grunt.loadNpmTasks(‘grunt-contrib-jshint’);
grunt.loadNpmTasks(‘grunt-jsbeautifier’);
grunt.loadNpmTasks(‘grunt-casperjs’);
grunt.loadNpmTasks(‘grunt-jsdoc’);

grunt.registerTask(‘test’, [‘jshint’, ‘casperjs’]);
grunt.registerTask(‘beautify’, [‘jsbeautifier’]);
grunt.registerTask(‘default’, [‘beautify’, ‘clean’, ‘jsdoc’, ‘test’]);
};
[/javascript] Configurtion file (conf.json)
[javascript]{
“name”: “hasan”,
“project”: “casperjs”,
“includeFiles”: “test/lib/vars.js”,
“logFile”: “artifacts/log.xml”,
“onlyTestFiles”: “test/*.js”,
“allJsInTest”: “test/**/*.js”,
“docs”: “artifacts/docs”
}
[/javascript] Test file (test/test.js)
[javascript]casper.test.begin(‘Test’, 1, function suite(test) {
casper.start(“http://localhost/index.html”, function() {
casper.userAgent(‘Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.66 Safari/537.36’);
});
var x = require(‘casper’).selectXPath;
var fields = {};
casper.then(function() {
casper.test.comment(“locating form in html”);
casper.test.assertExists(x(‘.//form[@name=”hasanForm”]’));

/** Creating an array to store form data*/

/** Filling array with form data */
fields[‘//*[@id=”ext-gen1089″]’] = “first text box”;
fields[‘//*[@id=”ext-gen1091″]’] = “second text box”;

/** Passing the data array to the full to store data in the form
* To capture the form with data, we donot submit the form by passing
* false signal in third paramter of fillXPath function
* */
this.fillXPath(‘form[name=”hasanForm”]’, fields, false);
this.capture(artifactDirImage + “Screenshotbefore_submit.png”);
});
casper.then(function() {
// you can use fillxpath again using third parameter true to submit the form
//this.fillXPath(‘form[name=”hasanForm”]’, fields, true);
this.click(x(“.//*[@id=’button-1054-btnEl’]”));

});
casper.then(function() {

this.capture(artifactDirImage + “Screenshotafter_submit.png”);
});
casper.run(function() {
test.done();
});
});
[/javascript] Library file (test/lib/vars.js)
[javascript]casper.on(“page.error”, function(msg, trace) {
this.echo(“Error: ” + msg);
// maybe make it a little fancier with the pre from the PhantomJS equivalent
});

var u = require(‘utils’);
var artifactDirImage = “artifacts/images/”;
[/javascript]

Previous post Schedule a job periodically in Jenkins during working days Next post dial unix /var/run/docker.sock: permission denied

Categories

  • Casperjs (1)
  • CI/CD (4)
  • DevOps (6)
  • Gruntjs (2)
  • Jira (1)
  • Linux (1)
  • Programming (1)
  • Uncategorized (14)
  • VMware (1)

Archives

  • May 2020 (1)
  • April 2020 (1)
  • March 2020 (2)
  • September 2019 (2)
  • May 2018 (1)
  • September 2017 (3)
  • July 2017 (1)
  • June 2017 (4)
  • May 2017 (1)
  • July 2015 (2)
  • January 2015 (1)
  • October 2014 (1)
  • September 2014 (5)
  • August 2014 (1)

Tags

Arduino Arduino sketch Arduino sketch upload bash shell casperjs Couchdb Curl docker container docker images github Gitlab gnu Parallel gruntjs JAVA JAVA jenkins Jira JPA Json Linux linux mint Maven mint MYSQL Tomcat Ubuntu Version Control xpath
  • Home
    • About me
  • Hashicorp
  • Ansible
  • CI/CD
  • DevOps
@2017
Manage Cookie Consent
We use cookies to optimize our website and our service.
Functional Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
Manage options Manage services Manage {vendor_count} vendors Read more about these purposes
Preferences
{title} {title} {title}