casper.on('remote.message', function(message) {
    this.echo('Message: '+ JSON.stringify(message));
});

casper.on('page.error', function(message, trace) {
    this.echo('Page error: ' + message);
    this.echo(JSON.stringify(trace));
});

casper.on('page.initialized', function() {
    this.evaluate(polyfillObjectAssign);
    this.evaluate(polyfillFunctionBind);
});

var polyfillFunctionBind = function() {
    if (!Function.prototype.bind) {
        Function.prototype.bind = function(oThis) {
            if (typeof this !== 'function') {
                // closest thing possible to the ECMAScript 5
                // internal IsCallable function
                throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');
            }

            var aArgs   = Array.prototype.slice.call(arguments, 1),
                fToBind = this,
                fNOP    = function() {},
                fBound  = function() {
                    return fToBind.apply(this instanceof fNOP
                            ? this
                            : oThis,
                        aArgs.concat(Array.prototype.slice.call(arguments)));
                };

            if (this.prototype) {
                // native functions don't have a prototype
                fNOP.prototype = this.prototype;
            }
            fBound.prototype = new fNOP();

            return fBound;
        };
    }
    console.log("Function.prototype.bind has been polyfilled");
};

var polyfillObjectAssign = function() {
    if (typeof Object.assign != 'function') {
          Object.assign = function (target) {
          'use strict';
          if (target === undefined || target === null) {
            throw new TypeError('Cannot convert undefined or null to object');
          }

          var output = Object(target);
          for (var index = 1; index < arguments.length; index++) {
            var source = arguments[index];
            if (source !== undefined && source !== null) {
              for (var nextKey in source) {
                if (source.hasOwnProperty(nextKey)) {
                  output[nextKey] = source[nextKey];
                }
              }
            }
          }
          return output;
        };
    }
    console.log("Object.assign has been polyfilled");
};

@@ -359,16 +359,54 @@
 nBind);%0A
+    this.evaluate(polyfillArrayFind);%0A
 %7D);%0A%0Avar
@@ -1470,72 +1470,8 @@
   %7D%0A
-    console.log(%22Function.prototype.bind has been polyfilled%22);%0A
 %7D;%0A%0A
@@ -2240,61 +2240,676 @@
   %7D%0A
-    console.log(%22Object.assign has been polyfilled%22);%0A%7D;
+%7D;%0A%0Avar polyfillArrayFind = function() %7B%0A  if (!Array.prototype.find) %7B%0A    Array.prototype.find = function(predicate) %7B%0A      if (this === null) %7B%0A        throw new TypeError('Array.prototype.find called on null or undefined');%0A      %7D%0A      if (typeof predicate !== 'function') %7B%0A        throw new TypeError('predicate must be a function');%0A      %7D%0A      var list = Object(this);%0A      var length = list.length %3E%3E%3E 0;%0A      var thisArg = arguments%5B1%5D;%0A      var value;%0A%0A      for (var i = 0; i %3C length; i++) %7B%0A        value = list%5Bi%5D;%0A        if (predicate.call(thisArg, value, i, list)) %7B%0A          return value;%0A        %7D%0A      %7D%0A      return undefined;%0A    %7D;%0A  %7D%0A%7D
 %0A

Add array find polypill