Noisy Pneumatic Mnemonic

    grunt-lib-phantomjs2-unofficial

    0.7.2 • Public • Published

    grunt-lib-phantomjs Build Status

    Grunt and PhantomJS, sitting in a tree.

    WARNING: This is an unoffical fork that works with PhantomJS version 2.0.0. It was created because the upgrade to the desired version of PhantomJS has not yet been done for the master branch of grunt-lib-phantomjs.

    Usage

    The best way to understand how this lib should be used is by looking at the grunt-contrib-qunit plugin. Mainly, look at how the lib is required, how event handlers are bound and how PhantomJS is actually spawned.

    Also, in the case of the grunt-contrib-qunit plugin, it's important to know that the page being loaded into PhantomJS doesn't know it will be loaded into PhantomJS, and as such doesn't have any PhantomJS->Grunt code in it. That communication code, aka. the "bridge", is dynamically injected into the html page.

    Options

    • timeout: PhantomJS' timeout, in milliseconds.
    • inject: JavaScript to inject into the page.
    • page: an object of options for the PhantomJS page object.
    • screenshot: saves a screenshot on failure

    An inline example

    If a Grunt task looked something like this:

    grunt.registerTask('mytask', 'Integrate with phantomjs.', function() {
      var phantomjs = require('grunt-lib-phantomjs').init(grunt);
      var errorCount = 0;
     
      // Handle any number of namespaced events like so.
      phantomjs.on('mytask.ok', function(msg) {
        grunt.log.writeln(msg);
      });
     
      phantomjs.on('mytask.error', function(msg) {
        errorCount++;
        grunt.log.error(msg);
      });
     
      // Create some kind of "all done" event.
      phantomjs.on('mytask.done', function() {
        phantomjs.halt();
      });
     
      // Built-in error handlers.
      phantomjs.on('fail.load', function(url) {
        phantomjs.halt();
        grunt.warn('PhantomJS unable to load URL.');
      });
     
      phantomjs.on('fail.timeout', function() {
        phantomjs.halt();
        grunt.warn('PhantomJS timed out.');
      });
     
      // This task is async.
      var done = this.async();
     
      // Spawn phantomjs
      phantomjs.spawn('test.html', {
        // Additional PhantomJS options.
        options: {},
        // Complete the task when done.
        done: function(err) {
          done(err || errorCount === 0);
        }
      });
     
    });

    And test.html looked something like this (note the "bridge" is hard-coded into this page and not injected):

    <!doctype html>
    <html>
    <head>
    <script>
     
    // Send messages to the parent PhantomJS process via alert! Good times!!
    function sendMessage() {
      var args = [].slice.call(arguments);
      alert(JSON.stringify(args));
    }
     
    sendMessage('mytask.ok', 'Something worked.');
    sendMessage('mytask.error', 'Something failed.');
    sendMessage('mytask.done');
     
    </script> 
    </head>
    <body>
    </body>
    </html>

    Then running Grunt would behave something like this:

    $ grunt mytask
    Running "mytask" task
    Something worked.
    >> Something failed.
    Warning: Task "mytask" failed. Use --force to continue.
     
    Aborted due to warnings.

    OS Dependencies

    PhantomJS requires these dependencies on Ubuntu/Debian:

    apt-get install libfontconfig1 fontconfig libfontconfig1-dev libfreetype6-dev
    

    Keywords

    none

    Install

    npm i grunt-lib-phantomjs2-unofficial

    DownloadsWeekly Downloads

    2

    Version

    0.7.2

    License

    MIT

    Last publish

    Collaborators

    • ant-ivanov