Class: Capybara::Driver::Akephalos

Inherits:
Base
  • Object
show all
Defined in:
lib/akephalos/capybara.rb

Overview

Driver class exposed to Capybara. It implements Capybara’s full driver API, and is the entry point for interaction between the test suites and HtmlUnit.

This class and Capybara::Driver::Akephalos::Node are written to run on both MRI and JRuby, and is agnostic whether the Akephalos::Client instance is used directly or over DRb.

Defined Under Namespace

Classes: Node

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ Akephalos

Returns a new instance of Akephalos.



170
171
172
173
174
# File 'lib/akephalos/capybara.rb', line 170

def initialize(app)
  @app = app
  @rack_server = Capybara::Server.new(@app)
  @rack_server.boot if Capybara.run_server
end

Instance Attribute Details

#appObject (readonly)

Returns the value of attribute app.



163
164
165
# File 'lib/akephalos/capybara.rb', line 163

def app
  @app
end

#rack_serverObject (readonly)

Returns the value of attribute rack_server.



163
164
165
# File 'lib/akephalos/capybara.rb', line 163

def rack_server
  @rack_server
end

Class Method Details

.driverClient

Returns an instance of Akephalos::Client.

Returns:

  • (Client)

    an instance of Akephalos::Client



166
167
168
# File 'lib/akephalos/capybara.rb', line 166

def self.driver
  @driver ||= Akephalos::Client.new
end

Instance Method Details

#bodyString

page.modified_source will return a string with html entities converted into the unicode equivalent but the string will be marked as ASCII-8BIT which causes conversion issues so we force the encoding to UTF-8 (ruby 1.9 only)

Returns:

  • (String)

    the page’s modified source



194
195
196
197
198
199
200
201
202
# File 'lib/akephalos/capybara.rb', line 194

def body
  body_source = page.modified_source

  if body_source.respond_to?(:force_encoding)
    body_source.force_encoding("UTF-8")
  else
    body_source
  end
end

#browserObject

Returns the browser.

Returns:

  • the browser



273
274
275
# File 'lib/akephalos/capybara.rb', line 273

def browser
  self.class.driver
end

#cleanup!Object

Deprecated.

This method is deprecated in Capybara’s master branch. Use #reset! instead.

Clear all cookie session data.



227
228
229
# File 'lib/akephalos/capybara.rb', line 227

def cleanup!
  reset!
end

#cookiesObject

Returns the session cookies.

Returns:

  • the session cookies



278
279
280
# File 'lib/akephalos/capybara.rb', line 278

def cookies
  browser.cookies
end

#current_urlString

Returns the page’s current URL.

Returns:

  • (String)

    the page’s current URL



237
238
239
# File 'lib/akephalos/capybara.rb', line 237

def current_url
  page.current_url
end

#evaluate_script(script) ⇒ Object

Execute JavaScript against the current page and return the results.

Parameters:

  • script (String)

    the JavaScript to be executed

Returns:

  • the result of the JavaScript



263
264
265
# File 'lib/akephalos/capybara.rb', line 263

def evaluate_script(script)
  page.evaluate_script script
end

#execute_script(script) ⇒ nil

Execute JavaScript against the current page, discarding any return value.

Parameters:

  • script (String)

    the JavaScript to be executed

Returns:

  • (nil)


255
256
257
# File 'lib/akephalos/capybara.rb', line 255

def execute_script(script)
  page.execute_script script
end

#find(selector) ⇒ Array<Node>

Search for nodes which match the given XPath selector.

Parameters:

  • selector (String)

    XPath query

Returns:

  • (Array<Node>)

    the matched nodes



245
246
247
248
249
# File 'lib/akephalos/capybara.rb', line 245

def find(selector)
  nodes = []
  page.find(selector).each { |node| nodes << Node.new(self, node) }
  nodes
end

#pageObject

Returns the current page.

Returns:

  • the current page



268
269
270
# File 'lib/akephalos/capybara.rb', line 268

def page
  browser.page
end

#reset!Object

Clear all cookie session data.



232
233
234
# File 'lib/akephalos/capybara.rb', line 232

def reset!
  cookies.clear
end

#response_headersHash{String => String}

Returns the page’s response headers.

Returns:

  • (Hash{String => String})

    the page’s response headers



205
206
207
# File 'lib/akephalos/capybara.rb', line 205

def response_headers
  page.response_headers
end

#sourceString

Returns the page’s original source.

Returns:

  • (String)

    the page’s original source



184
185
186
# File 'lib/akephalos/capybara.rb', line 184

def source
  page.source
end

#status_codeInteger

Returns the response’s status code.

Returns:

  • (Integer)

    the response’s status code



210
211
212
# File 'lib/akephalos/capybara.rb', line 210

def status_code
  page.status_code
end

#user_agentString

Returns the current user agent string.

Returns:

  • (String)

    the current user agent string



283
284
285
# File 'lib/akephalos/capybara.rb', line 283

def user_agent
  browser.user_agent
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



292
293
294
# File 'lib/akephalos/capybara.rb', line 292

def user_agent=(user_agent)
  browser.user_agent = user_agent
end

#visit(path) ⇒ Object

Visit the given path in the browser.

Parameters:

  • path (String)

    relative path to visit



179
180
181
# File 'lib/akephalos/capybara.rb', line 179

def visit(path)
  browser.visit(url(path))
end

#waitfalse

Disable waiting in Capybara, since waiting is handled directly by Akephalos.

Returns:

  • (false)


300
301
302
# File 'lib/akephalos/capybara.rb', line 300

def wait
  false
end

#within_frame(frame_id, &block) ⇒ Object

Execute the given block within the context of a specified frame.

Parameters:

  • frame_id (String)

    the frame’s id

Raises:

  • (Capybara::ElementNotFound)

    if the frame is not found



218
219
220
221
222
# File 'lib/akephalos/capybara.rb', line 218

def within_frame(frame_id, &block)
  unless page.within_frame(frame_id, &block)
    raise Capybara::ElementNotFound, "Unable to find frame with id '#{frame_id}'"
  end
end