teamcapybara--capybara/lib/capybara/driver/celerity_driver.rb

107 lines
1.9 KiB
Ruby
Raw Normal View History

class Capybara::Driver::Celerity < Capybara::Driver::Base
class Node < Capybara::Node
2009-11-04 23:34:11 +00:00
def text
node.text
end
2009-11-07 23:28:32 +00:00
def [](name)
2009-11-04 23:34:11 +00:00
value = if name.to_sym == :class
node.class_name
else
node.send(name.to_sym)
end
return value if value and not value.empty?
end
2009-11-07 23:28:32 +00:00
2009-11-10 21:48:31 +00:00
def set(value)
2009-11-20 17:23:05 +00:00
node.set(value)
2009-11-07 23:28:32 +00:00
end
2009-11-11 21:54:02 +00:00
def select(option)
node.select(option)
rescue
options = all(:xpath, "//option").map { |o| "'#{o.text}'" }.join(', ')
raise Capybara::OptionNotFound, "No such option '#{option}' in this select box. Available options: #{options}"
2009-11-11 21:54:02 +00:00
end
2009-11-04 23:42:13 +00:00
def click
node.click
end
def drag_to(element)
node.fire_event('mousedown')
element.node.fire_event('mousemove')
element.node.fire_event('mouseup')
end
2009-11-05 14:10:18 +00:00
def tag_name
# FIXME: this might be the dumbest way ever of getting the tag name
# there has to be something better...
node.to_xml[/^\s*<([a-z0-9\-\:]+)/, 1]
end
2010-01-01 21:46:05 +00:00
2009-12-22 20:13:55 +00:00
def visible?
node.visible?
end
2010-01-01 21:46:05 +00:00
def path
node.xpath
end
2010-01-01 21:46:05 +00:00
2009-11-04 23:34:11 +00:00
end
attr_reader :app, :rack_server
2010-01-01 21:46:05 +00:00
def initialize(app)
2009-11-04 22:00:05 +00:00
@app = app
@rack_server = Capybara::Server.new(@app)
@rack_server.boot if Capybara.run_server
2009-11-04 22:00:05 +00:00
end
2010-01-01 21:46:05 +00:00
2009-11-04 22:05:11 +00:00
def visit(path)
2009-11-04 22:00:05 +00:00
browser.goto(url(path))
end
2010-01-01 21:46:05 +00:00
def current_url
browser.url
end
def source
browser.html
end
2010-01-01 21:46:05 +00:00
def body
browser.document.as_xml
2009-11-04 22:00:05 +00:00
end
2010-01-01 21:46:05 +00:00
def response_headers
browser.response_headers
end
2010-01-01 21:46:05 +00:00
2009-11-04 23:34:11 +00:00
def find(selector)
browser.elements_by_xpath(selector).map { |node| Node.new(self, node) }
2009-11-04 23:34:11 +00:00
end
2010-01-01 21:46:05 +00:00
def wait?; true; end
2009-11-04 22:00:05 +00:00
def evaluate_script(script)
browser.execute_script "#{script}"
end
2010-01-01 19:13:54 +00:00
def browser
unless @_browser
require 'celerity'
@_browser = ::Celerity::Browser.new(:browser => :firefox, :log_level => :off)
end
2010-01-01 21:46:05 +00:00
2010-01-01 19:13:54 +00:00
@_browser
end
2009-11-04 22:00:05 +00:00
private
def url(path)
rack_server.url(path)
2009-11-04 22:00:05 +00:00
end
2009-11-07 23:28:32 +00:00
end