diff --git a/lib/capybara/driver/base.rb b/lib/capybara/driver/base.rb index ae551959..6ea9a0ed 100644 --- a/lib/capybara/driver/base.rb +++ b/lib/capybara/driver/base.rb @@ -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 \ No newline at end of file diff --git a/lib/capybara/driver/celerity_driver.rb b/lib/capybara/driver/celerity_driver.rb index 8653f929..8f75495c 100644 --- a/lib/capybara/driver/celerity_driver.rb +++ b/lib/capybara/driver/celerity_driver.rb @@ -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) diff --git a/lib/capybara/driver/rack_test_driver.rb b/lib/capybara/driver/rack_test_driver.rb index cc856261..28e1d9cf 100644 --- a/lib/capybara/driver/rack_test_driver.rb +++ b/lib/capybara/driver/rack_test_driver.rb @@ -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? diff --git a/lib/capybara/driver/selenium_driver.rb b/lib/capybara/driver/selenium_driver.rb index 5c65f8fe..7d73c856 100644 --- a/lib/capybara/driver/selenium_driver.rb +++ b/lib/capybara/driver/selenium_driver.rb @@ -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 diff --git a/lib/capybara/session.rb b/lib/capybara/session.rb index 73abb7be..31f8531b 100644 --- a/lib/capybara/session.rb +++ b/lib/capybara/session.rb @@ -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)