Class: Celerity::Browser

Inherits:
Object
  • Object
show all
Includes:
Container, XpathSupport
Defined in:
lib/celerity/browser.rb,
lib/celerity/watir_compatibility.rb

Class Attribute Summary collapse

Instance Attribute Summary collapse

Attributes included from Container

#browser

Class Method Summary collapse

Instance Method Summary collapse

Methods included from XpathSupport

#element_by_xpath, #element_from_dom_node, #elements_by_xpath

Methods included from Container

#area, #areas, #button, #buttons, #cell, #cells, #check_box, #checkboxes, #container=, #dd, #dds, #del, #dels, #div, #divs, #dl, #dls, #dt, #dts, #em, #ems, #file_field, #file_fields, #form, #forms, #frame, #frames, #h1, #h1s, #h2, #h2s, #h3, #h3s, #h4, #h4s, #h5, #h5s, #h6, #h6s, #hidden, #hiddens, #image, #images, #ins, #inses, #label, #labels, #li, #link, #links, #lis, #map, #maps, #meta, #metas, #ol, #ols, #option, #p, #pre, #pres, #ps, #radio, #radios, #row, #rows, #select_list, #select_lists, #span, #spans, #strong, #strongs, #table, #tables, #tbodies, #tbody, #text_field, #text_fields, #tfoot, #tfoots, #th, #thead, #theads, #ths, #ul, #uls

Methods included from ShortInspect

#short_inspect

Constructor Details

#initialize(opts = {}) ⇒ Celerity::Browser

Creates a browser object.

Parameters:

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

    a customizable set of options

Options Hash (opts):

  • :browser (:internet_explorer, :firefox, :firefox3) — default: :firefox3

    Set the BrowserVersion used by HtmlUnit. Defaults to Firefox 3.

  • :charset (String) — default: "UTF-8"

    Specify the charset that webclient will use for requests.

  • :css (Boolean) — default: true

    Enable/disable CSS. Enabled by default.

  • :ignore_pattern (Regexp)

    See Browser#ignore_pattern=

  • :javascript_enabled (Boolean) — default: true

    Enable/disable JavaScript evaluation. Enabled by default.

  • :javascript_exceptions (Boolean) — default: false

    Raise exceptions on script errors. Disabled by default.

  • :log_level (Symbol) — default: :warning

    @see log_level=

  • :proxy (String) — default: nil

    Proxy server to use, in address:port format.

  • :refresh_handler (:immediate, :waiting, :threaded) — default: :immediate

    Set HtmlUnit’s refresh handler.

  • :render (:html, :xml) — default: :html

    What DOM representation to send to connected viewers.

  • :resynchronize (Boolean) — default: false

    Use HtmlUnit::NicelyResynchronizingAjaxController to resynchronize Ajax calls.

  • :secure_ssl (Boolean) — default: true

    Enable/disable secure SSL. Enabled by default.

  • :status_code_exceptions (Boolean) — default: false

    Raise exceptions on failing status codes (404 etc.). Disabled by default.

  • :user_agent (String)

    Override the User-Agent set by the :browser option

  • :viewer (String, false) — default: "127.0.0.1:6429"

    Connect to a CelerityViewer if available.

Raises:

  • (ArgumentError)

See Also:



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/celerity/browser.rb', line 56

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"
  @headers        = {}
  @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

Class Attribute Details

.attach_timeoutObject

Added for Watir compatibility - not in use by Celerity



6
7
8
# File 'lib/celerity/watir_compatibility.rb', line 6

def attach_timeout
  @attach_timeout
end

.speedObject

Added for Watir compatibility - not in use by Celerity



6
7
8
# File 'lib/celerity/watir_compatibility.rb', line 6

def speed
  @speed
end

.visibleObject

Added for Watir compatibility - not in use by Celerity



6
7
8
# File 'lib/celerity/watir_compatibility.rb', line 6

def visible
  @visible
end

Instance Attribute Details

#charsetObject

Returns the value of attribute charset.



6
7
8
# File 'lib/celerity/browser.rb', line 6

def charset
  @charset
end

#headersObject

Returns the value of attribute headers.



6
7
8
# File 'lib/celerity/browser.rb', line 6

def headers
  @headers
end

#objectObject

Returns the value of attribute object.



6
7
8
# File 'lib/celerity/browser.rb', line 6

def object
  @object
end

#optionsObject (readonly)

Returns the value of attribute options.



7
8
9
# File 'lib/celerity/browser.rb', line 7

def options
  @options
end

#pageObject

Returns the value of attribute page.



6
7
8
# File 'lib/celerity/browser.rb', line 6

def page
  @page
end

#viewerObject (readonly)

Returns the value of attribute viewer.



7
8
9
# File 'lib/celerity/browser.rb', line 7

def viewer
  @viewer
end

#visibleObject

Added for Watir compatibility - not in use by Celerity



14
15
16
# File 'lib/celerity/watir_compatibility.rb', line 14

def visible
  @visible
end

#webclientObject (readonly)

Returns the value of attribute webclient.



7
8
9
# File 'lib/celerity/browser.rb', line 7

def webclient
  @webclient
end

Class Method Details

.attach(*args) ⇒ Object

Not implemented. Use ClickableElement#click_and_attach instead.

Raises:

  • (NotImplementedError)


26
27
28
# File 'lib/celerity/browser.rb', line 26

def self.attach(*args)
  raise NotImplementedError, "use ClickableElement#click_and_attach instead"
end

.eachObject

Added for Watir compatibility - not in use by Celerity



10
# File 'lib/celerity/watir_compatibility.rb', line 10

def each; end

.start(uri) ⇒ Celerity::Browser Also known as: start_window

Initialize a browser and go to the given URL

Parameters:

  • uri (String)

    The URL to go to.

Returns:



16
17
18
19
20
# File 'lib/celerity/browser.rb', line 16

def self.start(uri)
  browser = new
  browser.goto(uri)
  browser
end

Instance Method Details

#add_checker(checker = nil) {|browser| ... } ⇒ Object

Add a ‘checker’ proc that will be run on every page load

Parameters:

  • checker (Proc) (defaults to: nil)

    The proc to be run (can also be given as a block)

Yield Parameters:

Raises:

  • (ArgumentError)

    if no Proc or block was given.



566
567
568
569
570
571
572
573
574
# File 'lib/celerity/browser.rb', line 566

def add_checker(checker = nil, &block)
  if block_given?
    @error_checkers << block
  elsif Proc === checker
    @error_checkers << checker
  else
    raise ArgumentError, "argument must be a Proc or block"
  end
end

Add a cookie with the given parameters (Celerity only)

Parameters:

  • domain (String)
  • name (String)
  • value (String)
  • opts (Hash) (defaults to: {})

    a customizable set of options

Options Hash (opts):

  • :path (String) — default: "/"

    A path

  • :expires (Time) — default: 1 day from now

    An expiration date

  • :secure (Boolean) — default: false

Raises:

  • (ArgumentError)


344
345
346
347
348
349
350
351
352
353
354
355
# File 'lib/celerity/browser.rb', line 344

def add_cookie(domain, name, value, opts = {})
  path    = opts.delete(:path) || "/"
  max_age = opts.delete(:expires) || (Time.now + 60*60*24) # not sure if this is correct
  secure  = opts.delete(:secure) || false

  raise(ArgumentError, "unknown option: #{opts.inspect}") unless opts.empty?

  cookie = HtmlUnit::Util::Cookie.new(domain, name, value, path, max_age, secure)
  @webclient.getCookieManager.addCookie cookie

  cookie
end

#add_listener(type, &block) ⇒ Object

Add a listener block for one of the available types. (Celerity only) Types map to HtmlUnit interfaces like this:

:status           => StatusHandler
:alert            => AlertHandler  ( window.alert() )
:web_window_event => WebWindowListener
:html_parser      => HTMLParserListener
:incorrectness    => IncorrectnessListener
:confirm          => ConfirmHandler ( window.confirm() )
:prompt           => PromptHandler ( window.prompt() )

Examples:

browser.add_listener(:status) { |page, message| ... }
browser.add_listener(:alert) { |page, message| ... }
browser.add_listener(:web_window_event) { |web_window_event| ... }
browser.add_listener(:html_parser) { |message, url, line, column, key| ... }
browser.add_listener(:incorrectness) { |message, origin| ... }
browser.add_listener(:confirm) { |page, message| ...; true }
browser.add_listener(:prompt) { |page, message| ... }

Parameters:

  • type (Symbol)

    One of the above symbols.

  • block (Proc)

    A block to be executed for events of this type.



532
533
534
# File 'lib/celerity/browser.rb', line 532

def add_listener(type, &block)
  listener.add_listener(type, &block)
end

#assert_existsObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Check that we have a @page object.

Raises:



757
758
759
# File 'lib/celerity/browser.rb', line 757

def assert_exists
  raise UnknownObjectException, "no page loaded" unless exist?
end

#asynchronized {|browser| ... } ⇒ Object

Allows you to temporarliy switch to HtmlUnit’s default AjaxController, so ajax calls are performed asynchronously. This is useful if you have created the Browser with :resynchronize => true, but want to switch it off temporarily.

Yield Parameters:

See Also:

  • #new


473
474
475
476
477
478
# File 'lib/celerity/browser.rb', line 473

def asynchronized(&block)
  old_controller = @webclient.ajaxController
  @webclient.setAjaxController(::HtmlUnit::AjaxController.new)
  yield self
  @webclient.setAjaxController(old_controller)
end

#backString

Goto back one history item

Returns:

  • (String)

    The url of the resulting page.



262
263
264
265
266
267
# File 'lib/celerity/browser.rb', line 262

def back
  @webclient.getCurrentWindow.getHistory.back
  refresh_page_from_window

  url
end

#bring_to_frontObject

Added for Watir compatibility - not in use by Celerity



17
# File 'lib/celerity/watir_compatibility.rb', line 17

def bring_to_front; true; end

#clear_cacheObject

Clears the cache of “compiled JavaScript files and parsed CSS snippets”



311
312
313
# File 'lib/celerity/browser.rb', line 311

def clear_cache
  @webclient.cache.clear
end

#clear_cookiesObject

Clears all cookies. (Celerity only)



303
304
305
# File 'lib/celerity/browser.rb', line 303

def clear_cookies
  @webclient.getCookieManager.clearCookies
end

#closeObject

Unsets the current page / closes all windows



131
132
133
134
135
# File 'lib/celerity/browser.rb', line 131

def close
  @page = nil
  @webclient.closeAllWindows
  @viewer.close
end

#confirm(bool, &block) ⇒ Object

Specify a boolean value to click either ‘OK’ or ‘Cancel’ in any confirm dialogs that might show up during the duration of the given block.

(Celerity only)

Parameters:

  • bool (Boolean)

    true to click ‘OK’, false to click ‘cancel’

  • block (Proc)

    A block that will trigger the confirm() call(s).



550
551
552
553
554
555
556
# File 'lib/celerity/browser.rb', line 550

def confirm(bool, &block)
  blk = lambda { bool }

  listener.add_listener(:confirm, &blk)
  yield
  listener.remove_listener(:confirm, blk)
end

#contains_text(expected_text) ⇒ Numeric?

Check if the current page contains the given text.

Parameters:

  • expected_text (String, Regexp)

    The text to look for.

Returns:

  • (Numeric, nil)

    The index of the matched text, or nil if it isn’t found.

Raises:

  • (TypeError)


244
245
246
247
# File 'lib/celerity/browser.rb', line 244

def contains_text(expected_text)
  return nil unless exist?
  super
end

#content_typeString

Returns content-type as in ‘text/html’.

Returns:

  • (String)

    content-type as in ‘text/html’



220
221
222
223
224
# File 'lib/celerity/browser.rb', line 220

def content_type
  return '' unless @page

  @page.getWebResponse.getContentType
end

#cookiesHash<domain, Hash<name, value>>

Get the cookies for this session. (Celerity only)

Returns:

  • (Hash<domain, Hash<name, value>>)


321
322
323
324
325
326
327
328
329
330
# File 'lib/celerity/browser.rb', line 321

def cookies
  result = Hash.new { |hash, key| hash[key] = {} }

  cookies = @webclient.getCookieManager.getCookies
  cookies.each do |cookie|
    result[cookie.getDomain][cookie.getName] = cookie.getValue
  end

  result
end

#credentials=(string) ⇒ Object

Set the credentials used for basic HTTP authentication. (Celerity only)

Example:

browser.credentials = "username:password"

Parameters:

  • A (String)

    string with username / password, separated by a colon



120
121
122
123
124
125
# File 'lib/celerity/browser.rb', line 120

def credentials=(string)
  user, pass = string.split(":")
  dcp = HtmlUnit::DefaultCredentialsProvider.new
  dcp.addCredentials(user, pass)
  @webclient.setCredentialsProvider(dcp)
end

#cssObject



676
677
678
# File 'lib/celerity/browser.rb', line 676

def css
  @webclient.cssEnabled
end

#css=(bool) ⇒ Object

Turn on/off CSS loading

Parameters:

  • (Bool)


672
673
674
# File 'lib/celerity/browser.rb', line 672

def css=(bool)
  @webclient.cssEnabled = bool
end

#debug_web_connection(name, &blk) ⇒ Object

Start or stop HtmlUnit’s DebuggingWebConnection. (Celerity only) The output will go to /tmp/«name»

Parameters:

  • name (String)

    directory name

  • blk (block)

    block to execute



488
489
490
491
492
493
494
495
496
# File 'lib/celerity/browser.rb', line 488

def debug_web_connection(name, &blk)
  old_wc = @webclient.getWebConnection

  @webclient.setWebConnection HtmlUnit::Util::DebuggingWebConnection.new(old_wc, name)
  res = yield
  @webclient.setWebConnection old_wc

  res
end

#disable_checker(checker) ⇒ Object

Remove the given checker from the list of checkers

Parameters:

  • checker (Proc)

    The Proc to disable.



581
582
583
# File 'lib/celerity/browser.rb', line 581

def disable_checker(checker)
  @error_checkers.delete(checker)
end

#disable_event_listenerObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Disable Celerity’s internal WebWindowEventListener



789
790
791
792
793
794
795
796
797
798
# File 'lib/celerity/browser.rb', line 789

def disable_event_listener
  listener.remove_listener(:web_window_event, @event_listener)

  if block_given?
    result = yield
    enable_event_listener

    result
  end
end

#documentHtmlUnit::HtmlHtml

Returns the underlying HtmlUnit document.

Returns:

  • (HtmlUnit::HtmlHtml)

    the underlying HtmlUnit document.



253
254
255
# File 'lib/celerity/browser.rb', line 253

def document
  @object
end

#enable_event_listenerObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Enable Celerity’s internal WebWindowEventListener



775
776
777
778
779
780
781
# File 'lib/celerity/browser.rb', line 775

def enable_event_listener
  @event_listener ||= lambda do |event|
    self.page = @page ? @page.getEnclosingWindow.getEnclosedPage : event.getNewPage
  end

  listener.add_listener(:web_window_event, &@event_listener)
end

#execute_script(source) ⇒ Object

Execute the given JavaScript on the current page.

Returns:

  • (Object)

    The resulting Object



382
383
384
385
# File 'lib/celerity/browser.rb', line 382

def execute_script(source)
  assert_exists
  @page.executeJavaScript(source.to_s).getJavaScriptResult
end

#exist?true, false Also known as: exists?

Checks if we have a page currently loaded.

Returns:

  • (true, false)


633
634
635
# File 'lib/celerity/browser.rb', line 633

def exist?
  !!@page
end

#focused_elementObject

Returns the element that currently has the focus (Celerity only)



765
766
767
# File 'lib/celerity/browser.rb', line 765

def focused_element
  element_from_dom_node(page.getFocusedElement())
end

#forwardString

Go forward one history item

Returns:

  • (String)

    The url of the resulting page.



274
275
276
277
278
279
# File 'lib/celerity/browser.rb', line 274

def forward
  @webclient.getCurrentWindow.getHistory.forward
  refresh_page_from_window

  url
end

#goto(uri) ⇒ String

Goto the given URL

Parameters:

  • uri (String)

    The url.

Returns:

  • (String)

    The url.



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/celerity/browser.rb', line 94

def goto(uri)
  uri = "http://#{uri}" unless uri =~ %r{://}
  
  request = HtmlUnit::WebRequestSettings.new(::Java::JavaNet::URL.new(uri))
  request.setCharset(@charset)
  
  self.headers.each_pair do |name,value|
    request.setAdditionalHeader(name,value)  
  end

  rescue_status_code_exception do
    self.page = @webclient.getPage(request)
  end

  url()
end

#htmlString

Returns the HTML content of the current page.

Returns:

  • (String)

    the HTML content of the current page



166
167
168
169
170
# File 'lib/celerity/browser.rb', line 166

def html
  return '' unless @page

  @page.getWebResponse.getContentAsString(@charset)
end

#ignore_pattern=(regexp) ⇒ Object

If a request is made to an URL that matches the pattern set here, Celerity will ignore the request and return an empty page with content type “text/html” instead.

This is useful to block unwanted requests (like ads/banners).



620
621
622
623
624
625
626
# File 'lib/celerity/browser.rb', line 620

def ignore_pattern=(regexp)
  unless regexp.kind_of?(Regexp)
    raise TypeError, "expected Regexp, got #{regexp.inspect}:#{regexp.class}"
  end

  Celerity::IgnoringWebConnection.new(@webclient, regexp)
end

#inspectObject



83
84
85
# File 'lib/celerity/browser.rb', line 83

def inspect
  short_inspect :exclude => %w[@webclient @browser @object @options @listener @event_listener]
end

#ioIO?

Returns page contents as an IO, returns nil if no page is loaded.

Returns:

  • (IO, nil)

    page contents as an IO, returns nil if no page is loaded.



230
231
232
233
234
# File 'lib/celerity/browser.rb', line 230

def io
  return nil unless @page

  @page.getWebResponse.getContentAsStream.to_io
end

#javascript_enabledObject



715
716
717
# File 'lib/celerity/browser.rb', line 715

def javascript_enabled
  @webclient.isJavaScriptEnabled
end

#javascript_enabled=(bool) ⇒ Object

Turn on/off JavaScript execution

Parameters:

  • (Bool)


711
712
713
# File 'lib/celerity/browser.rb', line 711

def javascript_enabled=(bool)
  @webclient.setJavaScriptEnabled(bool)
end

#javascript_exceptionsObject



648
649
650
# File 'lib/celerity/browser.rb', line 648

def javascript_exceptions
  @webclient.throwExceptionOnScriptError
end

#javascript_exceptions=(bool) ⇒ Object

Turn on/off javascript exceptions

Parameters:

  • (Bool)


644
645
646
# File 'lib/celerity/browser.rb', line 644

def javascript_exceptions=(bool)
  @webclient.throwExceptionOnScriptError = bool
end

#log_levelSymbol

:finest, :finer, :fine, :config, :info, :warning, :severe, or :off, :all

Returns:

  • (Symbol)

    the current log level



591
592
593
# File 'lib/celerity/browser.rb', line 591

def log_level
  Celerity::Util.logger_for('com.gargoylesoftware.htmlunit').level.to_s.downcase.to_sym
end

#log_level=(level) ⇒ Object

Set Java log level (default is :warning, can be any of :all, :finest, :finer, :fine, :config, :info, :warning, :severe, :off)

Parameters:

  • level (Symbol)

    The new log level.



601
602
603
604
605
606
607
608
609
610
611
# File 'lib/celerity/browser.rb', line 601

def log_level=(level)
  log_level = java.util.logging.Level.const_get(level.to_s.upcase)

  [ 'com.gargoylesoftware.htmlunit',
    'com.gargoylesoftware.htmlunit.html',
    'com.gargoylesoftware.htmlunit.javascript',
    'org.apache.commons.httpclient'
  ].each { |package| Celerity::Util.logger_for(package).level = log_level }

  level
end

#refreshObject

Refresh the current page



294
295
296
297
# File 'lib/celerity/browser.rb', line 294

def refresh
  assert_exists
  @page.refresh
end

#refresh_handler=(symbol) ⇒ Object



680
681
682
683
684
685
686
687
688
689
690
691
692
693
# File 'lib/celerity/browser.rb', line 680

def refresh_handler=(symbol)
  handler = case symbol
            when :waiting
              HtmlUnit::WaitingRefreshHandler.new
            when :threaded
              HtmlUnit::ThreadedRefreshHandler.new
            when :immediate
              HtmlUnit::ImmediateRefreshHandler.new
            else
              raise ArgumentError, "expected :waiting, :threaded or :immediate"
            end

  @webclient.setRefreshHandler handler
end

Remove the cookie with the given domain and name (Celerity only)

Parameters:

  • domain (String)
  • name (String)

Raises:



366
367
368
369
370
371
372
373
374
375
# File 'lib/celerity/browser.rb', line 366

def remove_cookie(domain, name)
  cm = @webclient.getCookieManager
  cookie = cm.getCookies.find { |c| c.getDomain == domain && c.getName == name }

  if cookie.nil?
    raise CookieNotFoundError, "no cookie with domain #{domain.inspect} and name #{name.inspect}"
  end

  cm.removeCookie(cookie)
end

#remove_listener(type, block) ⇒ Object



536
537
538
# File 'lib/celerity/browser.rb', line 536

def remove_listener(type, block)
  listener.remove_listener(type, block)
end

#response_headersHash

Returns response headers as a hash.

Returns:

  • (Hash)

    response headers as a hash



202
203
204
205
206
# File 'lib/celerity/browser.rb', line 202

def response_headers
  return {} unless @page

  Hash[*@page.getWebResponse.getResponseHeaders.map { |obj| [obj.name, obj.value] }.flatten]
end

#resynchronized {|browser| ... } ⇒ Object

Allows you to temporarily switch to HtmlUnit’s NicelyResynchronizingAjaxController to resynchronize ajax calls.

@browser.resynchronized do |b|
  b.link(:id, 'trigger_ajax_call').click
end

Yield Parameters:

See Also:

  • for how to configure the browser to always use this.


457
458
459
460
461
462
# File 'lib/celerity/browser.rb', line 457

def resynchronized(&block)
  old_controller = @webclient.ajaxController
  @webclient.setAjaxController(::HtmlUnit::NicelyResynchronizingAjaxController.new)
  yield self
  @webclient.setAjaxController(old_controller)
end

#secure_ssl=(bool) ⇒ Object

Turn on/off secure SSL

Parameters:

  • (Bool)


701
702
703
# File 'lib/celerity/browser.rb', line 701

def secure_ssl=(bool)
  @webclient.useInsecureSSL = !bool
end

#send_keys(keys) ⇒ Object

experimental - should be removed?



388
389
390
391
392
393
394
395
396
397
398
399
400
401
# File 'lib/celerity/browser.rb', line 388

def send_keys(keys)
  keys = keys.gsub(/\s*/, '').scan(/((?:\{[A-Z]+?\})|.)/u).flatten
  keys.each do |key|
    element = @page.getFocusedElement
    case key
    when "{TAB}"
      @page.tabToNextElement
    when /\w/
      element.type(key)
    else
      raise NotImplementedError
    end
  end
end

#speed=(s) ⇒ Object

Added for Watir compatibility - not in use by Celerity



19
# File 'lib/celerity/watir_compatibility.rb', line 19

def speed=(s); s end

#statusString

Returns the value of window.status.

Returns:

  • (String)

    the value of window.status



158
159
160
# File 'lib/celerity/browser.rb', line 158

def status
  execute_script "window.status" # avoid the listener overhead
end

#status_codeFixnum

Returns status code of the last request.

Returns:

  • (Fixnum)

    status code of the last request



212
213
214
# File 'lib/celerity/browser.rb', line 212

def status_code
  @page.getWebResponse.getStatusCode
end

#status_code_exceptionsObject



662
663
664
# File 'lib/celerity/browser.rb', line 662

def status_code_exceptions
  @webclient.throwExceptionOnFailingStatusCode
end

#status_code_exceptions=(bool) ⇒ Object

Turn on/off status code exceptions

Parameters:

  • (Bool)


658
659
660
# File 'lib/celerity/browser.rb', line 658

def status_code_exceptions=(bool)
  @webclient.throwExceptionOnFailingStatusCode = bool
end

#textString

Returns a text representation of the current page.

Returns:

  • (String)

    a text representation of the current page



186
187
188
189
190
191
192
193
194
195
196
# File 'lib/celerity/browser.rb', line 186

def text
  return '' unless @page

  if @page.respond_to?(:getContent)
    @page.getContent.strip
  elsif @page.respond_to?(:getDocumentElement) && doc = @page.getDocumentElement
    doc.asText.strip
  else
    ''
  end
end

#titleString

Returns the title of the current page.

Returns:

  • (String)

    the title of the current page



150
151
152
# File 'lib/celerity/browser.rb', line 150

def title
  @page ? @page.getTitleText : ''
end

#trace_javascript(debugger_klass = Celerity::JavascriptDebugger, &blk) ⇒ Object



498
499
500
501
502
503
# File 'lib/celerity/browser.rb', line 498

def trace_javascript(debugger_klass = Celerity::JavascriptDebugger, &blk)
  context_factory = @webclient.getJavaScriptEngine.getContextFactory
  context_factory.setDebugger debugger_klass.new
  yield
  context_factory.setDebugger nil
end

#urlString

Returns the URL of the current page.

Returns:

  • (String)

    the URL of the current page



141
142
143
144
# File 'lib/celerity/browser.rb', line 141

def url
  assert_exists
  @page.getWebResponse.getWebRequest.getUrl.toString
end

#visual_debuggerObject

Open the JavaScript debugger GUI



723
724
725
# File 'lib/celerity/browser.rb', line 723

def visual_debugger
  HtmlUnit::Util::WebClientUtils.attachVisualDebugger @webclient
end

#waitObject

Wait for javascript jobs to finish



285
286
287
288
# File 'lib/celerity/browser.rb', line 285

def wait
  assert_exists
  @webclient.waitForBackgroundJavaScript(10000);
end

#wait_until(timeout = 30) {|browser| ... } ⇒ Object

Wait until the given block evaluates to true (Celerity only)

Parameters:

  • timeout (Fixnum) (defaults to: 30)

    Number of seconds to wait before timing out (default: 30).

Yield Parameters:

See Also:



411
412
413
414
415
416
417
418
419
420
421
422
# File 'lib/celerity/browser.rb', line 411

def wait_until(timeout = 30, &block)
  returned = nil

  Timeout.timeout(timeout) do
    until returned = yield(self)
      refresh_page_from_window
      sleep 0.1
    end
  end

  returned
end

#wait_while(timeout = 30) {|browser| ... } ⇒ Object

Wait while the given block evaluates to true (Celerity only)

Parameters:

  • timeout (Fixnum) (defaults to: 30)

    Number of seconds to wait before timing out (default: 30).

Yield Parameters:

See Also:



432
433
434
435
436
437
438
439
440
441
442
443
# File 'lib/celerity/browser.rb', line 432

def wait_while(timeout = 30, &block)
  returned = nil

  Timeout.timeout(timeout) do
    while returned = yield(self)
      refresh_page_from_window
      sleep 0.1
    end
  end

  returned
end

#xmlString

Returns the XML representation of the DOM.

Returns:

  • (String)

    the XML representation of the DOM



176
177
178
179
180
# File 'lib/celerity/browser.rb', line 176

def xml
  return '' unless @page
  return @page.asXml if @page.respond_to?(:asXml)
  return text # fallback to text (for exampel for "plain/text" pages)
end