# File lib/celerity/browser.rb, line 57
    def initialize(opts = {})
      unless opts.is_a?(Hash)
        raise TypeError, "wrong argument type #{opts.class}, expected Hash"
      end

      unless (render_types = [:html, :xml, nil, 'html', 'xml']).include?(opts[:render])
        raise ArgumentError, "expected one of #{render_types.inspect} for key :render"
      end

      @options = opts.dup # keep the unmodified version around as well
      opts     = opts.dup # we'll delete from opts, so dup to avoid side effects

      @render_type   = opts.delete(:render)    || :html
      @charset       = opts.delete(:charset)   || "UTF-8"
      @page           = nil
      @error_checkers = []
      @browser        = self # for Container#browser

      setup_webclient opts
      setup_viewer opts.delete(:viewer)

      self.log_level = opts.delete(:log_level) || :off

      raise ArgumentError, "unknown option #{opts.inspect}" unless opts.empty?
    end