Class: Akephalos::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/akephalos/client.rb,
lib/akephalos/client/filter.rb,
lib/akephalos/client/cookies.rb

Overview

Akephalos::Client wraps HtmlUnit’s WebClient class. It is the main entry point for all interaction with the browser, exposing its current page and allowing navigation.

Defined Under Namespace

Classes: Cookies, Filter

Constant Summary collapse

DEFAULT_OPTIONS =

The default configuration options for a new Client.

{
  :browser => :firefox_3_6,
  :validate_scripts => true,
  :use_insecure_ssl => false,
  :htmlunit_log_level => 'fatal'
}
BROWSER_VERSIONS =

Map of browser version symbols to their HtmlUnit::BrowserVersion instances.

{
  :ie6         => HtmlUnit::BrowserVersion::INTERNET_EXPLORER_6,
  :ie7         => HtmlUnit::BrowserVersion::INTERNET_EXPLORER_7,
  :ie8         => HtmlUnit::BrowserVersion::INTERNET_EXPLORER_8,
  :firefox_3_6 => HtmlUnit::BrowserVersion::FIREFOX_3_6
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Client

Returns a new instance of Client.

Parameters:

  • options (Hash) (defaults to: {})

    the configuration options for this client

Options Hash (options):

  • :browser (Symbol) — default: :firefox_3_6

    the browser version ( see BROWSER_VERSIONS)

  • :validate_scripts (true, false) — default: true

    whether to raise errors on javascript errors



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/akephalos/client.rb', line 63

def initialize(options = {})
  process_options!(options)

  @_client = java.util.concurrent.FutureTask.new do

    if @http_proxy.nil? or @http_proxy_port.nil?
      client = HtmlUnit::WebClient.new(browser_version)
    else
      client = HtmlUnit::WebClient.new(browser_version, @http_proxy, @http_proxy_port)
    end

    client.setThrowExceptionOnFailingStatusCode(false)
    client.setAjaxController(HtmlUnit::NicelyResynchronizingAjaxController.new)
    client.setCssErrorHandler(HtmlUnit::SilentCssErrorHandler.new)
    client.setThrowExceptionOnScriptError(validate_scripts)
    client.setUseInsecureSSL(use_insecure_ssl)
    client.setRefreshHandler(HtmlUnit::WaitingRefreshHandler.new)

    Filter.new(client)
    client
  end
  Thread.new { @_client.run }
end

Instance Attribute Details

#browser_versionHtmlUnit::BrowserVersion (readonly)

Returns the configured browser version.

Returns:

  • (HtmlUnit::BrowserVersion)

    the configured browser version



28
29
30
# File 'lib/akephalos/client.rb', line 28

def browser_version
  @browser_version
end

#htmlunit_log_level"trace" / "debug" / "info" / "warn" / "error" or "fatal" (readonly)

Returns which points the htmlunit log level.

Returns:

  • ("trace" / "debug" / "info" / "warn" / "error" or "fatal")

    which points the htmlunit log level



37
38
39
# File 'lib/akephalos/client.rb', line 37

def htmlunit_log_level
  @htmlunit_log_level
end

#pagePage

Returns the current page.

Returns:

  • (Page)

    the current page



25
26
27
# File 'lib/akephalos/client.rb', line 25

def page
  @page
end

#use_insecure_ssltrue/false (readonly)

Returns whether to ignore insecure ssl certificates.

Returns:

  • (true/false)

    whether to ignore insecure ssl certificates



34
35
36
# File 'lib/akephalos/client.rb', line 34

def use_insecure_ssl
  @use_insecure_ssl
end

#validate_scriptstrue/false (readonly)

Returns whether to raise errors on javascript failures.

Returns:

  • (true/false)

    whether to raise errors on javascript failures



31
32
33
# File 'lib/akephalos/client.rb', line 31

def validate_scripts
  @validate_scripts
end

Instance Method Details

#confirm_dialog(confirm = true, &block) ⇒ Object

Confirm or cancel the dialog, returning the text of the dialog



171
172
173
174
175
176
177
# File 'lib/akephalos/client.rb', line 171

def confirm_dialog(confirm = true, &block)
  handler = HtmlUnit::ConfirmHandler.new
  handler.handleConfirmValue = confirm
  client.setConfirmHandler(handler)
  yield if block_given?
  return handler.text
end

#cookiesCookies

Returns the cookies for this session.

Returns:

  • (Cookies)

    the cookies for this session



101
102
103
# File 'lib/akephalos/client.rb', line 101

def cookies
  @cookies ||= Cookies.new(client.getCookieManager)
end

#process_options!(options) ⇒ Object

Merges the DEFAULT_OPTIONS with those provided to initialize the Client state, namely, its browser version, whether it should validate scripts, and htmlunit log level.

Parameters:

  • options (Hash)

    the options to process



157
158
159
160
161
162
163
164
165
166
167
168
# File 'lib/akephalos/client.rb', line 157

def process_options!(options)
  options = DEFAULT_OPTIONS.merge(options)

  @browser_version  = BROWSER_VERSIONS.fetch(options.delete(:browser))
  @validate_scripts = options.delete(:validate_scripts)
  @use_insecure_ssl = options.delete(:use_insecure_ssl)
  @htmlunit_log_level = options.delete(:htmlunit_log_level)
  @http_proxy = options.delete(:http_proxy)
  @http_proxy_port = options.delete(:http_proxy_port)

  java.lang.System.setProperty("org.apache.commons.logging.simplelog.defaultlog", @htmlunit_log_level)
end

#use_insecure_ssl?true, false

Returns whether to ignore insecure ssl certificates.

Returns:

  • (true, false)

    whether to ignore insecure ssl certificates



148
149
150
# File 'lib/akephalos/client.rb', line 148

def use_insecure_ssl?
  !!use_insecure_ssl
end

#user_agentString

Returns the current user agent string.

Returns:

  • (String)

    the current user agent string



106
107
108
# File 'lib/akephalos/client.rb', line 106

def user_agent
  @user_agent || client.getBrowserVersion.getUserAgent
end

#user_agent=(user_agent) ⇒ Object

Set the User-Agent header for this session. If :default is given, the User-Agent header will be reset to the default browser’s user agent.

Parameters:

  • user_agent (:default)

    the default user agent

  • user_agent (String)

    the user agent string to use



115
116
117
118
119
120
121
122
123
# File 'lib/akephalos/client.rb', line 115

def user_agent=(user_agent)
  if user_agent == :default
    @user_agent = nil
    client.removeRequestHeader("User-Agent")
  else
    @user_agent = user_agent
    client.addRequestHeader("User-Agent", user_agent)
  end
end

#validate_scripts?true, false

Returns whether javascript errors will raise exceptions.

Returns:

  • (true, false)

    whether javascript errors will raise exceptions



143
144
145
# File 'lib/akephalos/client.rb', line 143

def validate_scripts?
  !!validate_scripts
end

#visit(url) ⇒ Page

Visit the requested URL and return the page.

Parameters:

  • url (String)

    the URL to load

Returns:

  • (Page)

    the loaded page



91
92
93
94
95
96
97
98
# File 'lib/akephalos/client.rb', line 91

def visit(url)
  begin
    client.getPage(url)
  rescue Exception => e
    raise e unless e.message == 'java.lang.NullPointerException: null'
  end
  page
end