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
opts = opts.dup
@render_type = opts.delete(:render) || :html
@charset = opts.delete(:charset) || "UTF-8"
@page = nil
@error_checkers = []
@browser = self
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