Sha256: b526448b4289459954b95ad3aa07541d54e3401ed9dd23e9ad95fbc57a774684

Contents?: true

Size: 1.72 KB

Versions: 2

Compression:

Stored size: 1.72 KB

Contents

module WatirSplash
  class JavaScriptError < RuntimeError; end

  class Browser
    # raises an error if any JavaScript errors were found
    JAVASCRIPT_ERRORS_CHECKER = lambda do |browser| 
      error_message = browser.execute_script %q[
        var msg = window.__browserErrorMessage;
        window.__browserErrorMessage = undefined;
        return msg;
      ]

      raise JavaScriptError, "JavaScript error: #{error_message}" if error_message

      browser.execute_script %q[
        if (!window.onErrorFn) {
          window.onErrorFn = function(errorMsg, url, lineNumber) {
                               window.__browserErrorMessage = errorMsg + " @ " + url + ":" + lineNumber;

                               if (window.__onErrorFn)
                                 window.__onErrorFn(errorMsg, url, lineNumber);

                               return false;
                             };

          window.__onErrorFn = window.onerror;
          window.onerror = window.onErrorFn;
        }]
    end

    class << self

      attr_accessor :current

      def new
        prepare Watir::Browser.new
      end    

      def exist?
        current && current.exists?
      end

      alias_method :exists?, :exist?

      private

      def prepare browser
        self.current = browser
        browser.add_checker JAVASCRIPT_ERRORS_CHECKER
        browser
      end

      def method_missing name, *args
        if current.respond_to?(name)
          instance_eval %Q[
          def #{name}(*args)
            current.send(:#{name}, *args) {yield}
          end
          ]
          send(name, *args) {yield}
        else
          super
        end
      end

    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
watirsplash-2.4.4 lib/watirsplash/browser.rb
watirsplash-2.4.3 lib/watirsplash/browser.rb