// modules var system = require('system'),
casper = require('casper').create(), helper = requireRelative('_helper.js')(casper.cli.get(1));
// command line arguments var url = casper.cli.get(0),
dimensions = helper.dimensions, image_name = casper.cli.get(2), selector = casper.cli.get(3), globalBeforeCaptureJS = casper.cli.get(4), pathBeforeCaptureJS = casper.cli.get(5), dimensionsProcessed = 0, currentDimensions;
// functions function requireRelative(file) {
// PhantomJS will automatically `require` relatively, but CasperJS needs some extra help. Hence this function. // 'templates/javascript/casper.js' -> 'templates/javascript' var currentFilePath = system.args[3].split('/'); currentFilePath.pop(); var fs = require('fs'); currentFilePath = fs.absolute(currentFilePath.join('/')); return require(currentFilePath + '/' + file);
} function snap() {
console.log('Snapping ' + url + ' at: ' + currentDimensions.viewportWidth + 'x' + currentDimensions.viewportHeight); if (!selector) { this.capture(image_name); } else { this.captureSelector(image_name, selector); } dimensionsProcessed++; if (helper.takingMultipleScreenshots(dimensions) && dimensionsProcessed < dimensions.length) { currentDimensions = dimensions[dimensionsProcessed]; image_name = helper.replaceImageNameWithDimensions(image_name, currentDimensions); casper.viewport(currentDimensions.viewportWidth, currentDimensions.viewportHeight); casper.wait(300, function then () { snap.bind(this)(); }); }
}
if (helper.takingMultipleScreenshots(dimensions)) {
currentDimensions = dimensions[0]; image_name = helper.replaceImageNameWithDimensions(image_name, currentDimensions);
} else {
currentDimensions = dimensions;
}
// Casper can now do its magic casper.start(); casper.open(url); casper.viewport(currentDimensions.viewportWidth, currentDimensions.viewportHeight); casper.then(function() {
var self = this; if (globalBeforeCaptureJS && pathBeforeCaptureJS) { require(globalBeforeCaptureJS)(self, function thenExecuteOtherBeforeCaptureFile() { require(pathBeforeCaptureJS)(self, captureImage); }); } else if (globalBeforeCaptureJS) { require(globalBeforeCaptureJS)(self, captureImage); } else if (pathBeforeCaptureJS) { require(pathBeforeCaptureJS)(self, captureImage); } else { captureImage(); }
});
function captureImage() {
// waits for all images to download before taking screenshots // (broken images are a big cause of Wraith failures!) // Credit: http://reff.it/8m3HYP casper.waitFor(function() { return this.evaluate(function() { var images = document.getElementsByTagName('img'); return Array.prototype.every.call(images, function(i) { return i.complete; }); }); }, function then () { snap.bind(this)(); });
}
casper.run();