Class: Capybara::RackTest::Browser
- Inherits:
-
Object
- Object
- Capybara::RackTest::Browser
- Includes:
- Rack::Test::Methods
- Defined in:
- lib/capybara/rack_test/browser.rb
Instance Attribute Summary collapse
-
#current_host ⇒ Object
Returns the value of attribute current_host.
-
#driver ⇒ Object
readonly
Returns the value of attribute driver.
Instance Method Summary collapse
- #app ⇒ Object
- #body ⇒ Object
- #current_url ⇒ Object
- #dom ⇒ Object
- #find(selector) ⇒ Object
- #follow(method, path, attributes = {}) ⇒ Object
- #follow_redirects! ⇒ Object
-
#initialize(driver) ⇒ Browser
constructor
A new instance of Browser.
- #options ⇒ Object
- #process(method, path, attributes = {}) ⇒ Object
- #reset_cache! ⇒ Object
- #reset_host! ⇒ Object
- #source ⇒ Object
- #submit(method, path, attributes) ⇒ Object
- #visit(path, attributes = {}) ⇒ Object
Constructor Details
#initialize(driver) ⇒ Browser
Returns a new instance of Browser.
7 8 9 |
# File 'lib/capybara/rack_test/browser.rb', line 7 def initialize(driver) @driver = driver end |
Instance Attribute Details
#current_host ⇒ Object
Returns the value of attribute current_host.
5 6 7 |
# File 'lib/capybara/rack_test/browser.rb', line 5 def current_host @current_host end |
#driver ⇒ Object (readonly)
Returns the value of attribute driver.
4 5 6 |
# File 'lib/capybara/rack_test/browser.rb', line 4 def driver @driver end |
Instance Method Details
#app ⇒ Object
11 12 13 |
# File 'lib/capybara/rack_test/browser.rb', line 11 def app driver.app end |
#body ⇒ Object
79 80 81 |
# File 'lib/capybara/rack_test/browser.rb', line 79 def body dom.to_xml end |
#current_url ⇒ Object
65 66 67 68 69 |
# File 'lib/capybara/rack_test/browser.rb', line 65 def current_url last_request.url rescue Rack::Test::Error "" end |
#dom ⇒ Object
83 84 85 |
# File 'lib/capybara/rack_test/browser.rb', line 83 def dom @dom ||= Nokogiri::HTML(source) end |
#find(selector) ⇒ Object
87 88 89 |
# File 'lib/capybara/rack_test/browser.rb', line 87 def find(selector) dom.xpath(selector).map { |node| Capybara::RackTest::Node.new(self, node) } end |
#follow(method, path, attributes = {}) ⇒ Object
31 32 33 34 35 |
# File 'lib/capybara/rack_test/browser.rb', line 31 def follow(method, path, attributes = {}) return if path.gsub(/^#{request_path}/, '').start_with?('#') process(method, path, attributes) follow_redirects! end |
#follow_redirects! ⇒ Object
37 38 39 40 41 42 |
# File 'lib/capybara/rack_test/browser.rb', line 37 def follow_redirects! 5.times do process(:get, last_response["Location"]) if last_response.redirect? end raise Capybara::InfiniteRedirectError, "redirected more than 5 times, check for infinite redirects." if last_response.redirect? end |
#options ⇒ Object
15 16 17 |
# File 'lib/capybara/rack_test/browser.rb', line 15 def driver. end |
#process(method, path, attributes = {}) ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/capybara/rack_test/browser.rb', line 44 def process(method, path, attributes = {}) new_uri = URI.parse(path) current_uri = URI.parse(current_url) if new_uri.host @current_host = new_uri.scheme + '://' + new_uri.host end if new_uri.relative? if path.start_with?('?') path = request_path + path elsif not path.start_with?('/') path = request_path.sub(%r(/[^/]*$), '/') + path end path = current_host + path end reset_cache! send(method, path, attributes, env) end |
#reset_cache! ⇒ Object
75 76 77 |
# File 'lib/capybara/rack_test/browser.rb', line 75 def reset_cache! @dom = nil end |
#reset_host! ⇒ Object
71 72 73 |
# File 'lib/capybara/rack_test/browser.rb', line 71 def reset_host! @current_host = (Capybara.app_host || Capybara.default_host) end |
#source ⇒ Object
91 92 93 94 95 |
# File 'lib/capybara/rack_test/browser.rb', line 91 def source last_response.body rescue Rack::Test::Error nil end |
#submit(method, path, attributes) ⇒ Object
25 26 27 28 29 |
# File 'lib/capybara/rack_test/browser.rb', line 25 def submit(method, path, attributes) path = request_path if not path or path.empty? process(method, path, attributes) follow_redirects! end |
#visit(path, attributes = {}) ⇒ Object
19 20 21 22 23 |
# File 'lib/capybara/rack_test/browser.rb', line 19 def visit(path, attributes = {}) reset_host! process(:get, path, attributes) follow_redirects! end |