Let driver implementations provde a #response(RackResponse) so that Session can get body and response_headers

This commit is contained in:
Lenny Marks 2009-12-17 18:29:34 -05:00
parent 1bd4033655
commit 083382b675
5 changed files with 24 additions and 12 deletions

View File

@ -7,10 +7,6 @@ class Capybara::Driver::Base
raise "Not implemented"
end
def body
raise "Not implemented"
end
def evaluate_script(script)
raise Capybara::NotSupportedByDriverError
end
@ -18,4 +14,9 @@ class Capybara::Driver::Base
def wait?
false
end
def response
raise "Not implemented"
end
end

View File

@ -80,9 +80,9 @@ class Capybara::Driver::Celerity < Capybara::Driver::Base
def visit(path)
browser.goto(url(path))
end
def body
browser.html
def response
Rack::MockResponse.new(browser.status_code, browser.response_headers, browser.html)
end
def find(selector)

View File

@ -134,8 +134,10 @@ class Capybara::Driver::RackTest < Capybara::Driver::Base
get(path, attributes)
follow_redirect! while response.redirect?
cache_body
response
end
def submit(path, attributes)
post(path, attributes)
follow_redirect! while response.redirect?

View File

@ -72,10 +72,14 @@ class Capybara::Driver::Selenium < Capybara::Driver::Base
driver.navigate.to(url(path))
end
def body
driver.page_source
def response
#Can I get a response code and headers from Selenium?
#Maybe we should just plug in the location here
#and leave more header involved stuff for another driver
#(e.g. celerity)
Rack::MockResponse.new(-1, {}, driver.page_source)
end
def find(selector)
driver.find_elements(:xpath, selector).map { |node| Node.new(self, node) }
end

View File

@ -16,6 +16,7 @@ module Capybara
end
def driver
@driver ||= case mode
when :rack_test
Capybara::Driver::RackTest.new(app)
@ -28,6 +29,10 @@ module Capybara
end
end
def response_headers
driver.response.headers
end
def visit(path)
driver.visit(path)
end
@ -95,7 +100,7 @@ module Capybara
end
def body
driver.body
driver.response.body
end
def has_content?(content)