class Capybara::RackTest::Browser
frozen_string_literal: true
Attributes
current_host[RW]
driver[R]
Public Class Methods
new(driver)
click to toggle source
# File lib/capybara/rack_test/browser.rb, line 8 def initialize(driver) @driver = driver end
Public Instance Methods
app()
click to toggle source
# File lib/capybara/rack_test/browser.rb, line 12 def app driver.app end
current_url()
click to toggle source
# File lib/capybara/rack_test/browser.rb, line 64 def current_url last_request.url rescue Rack::Test::Error "" end
dom()
click to toggle source
# File lib/capybara/rack_test/browser.rb, line 81 def dom @dom ||= Capybara::HTML(html) end
find(format, selector)
click to toggle source
# File lib/capybara/rack_test/browser.rb, line 85 def find(format, selector) if format==:css dom.css(selector, Capybara::RackTest::CSSHandlers.new) else dom.xpath(selector) end.map { |node| Capybara::RackTest::Node.new(self, node) } end
follow(method, path, attributes = {})
click to toggle source
# File lib/capybara/rack_test/browser.rb, line 30 def follow(method, path, attributes = {}) return if path.gsub(/^#{Regexp.escape(request_path)}/, '').start_with?('#') || path.downcase.start_with?('javascript:') process_and_follow_redirects(method, path, attributes, {'HTTP_REFERER' => current_url}) end
html()
click to toggle source
# File lib/capybara/rack_test/browser.rb, line 93 def html last_response.body rescue Rack::Test::Error "" end
options()
click to toggle source
# File lib/capybara/rack_test/browser.rb, line 16 def options driver.options end
process(method, path, attributes = {}, env = {})
click to toggle source
# File lib/capybara/rack_test/browser.rb, line 45 def process(method, path, attributes = {}, env = {}) new_uri = URI.parse(path) method.downcase! unless method.is_a? Symbol new_uri.path = request_path if path.start_with?("?") new_uri.path = "/" if new_uri.path.empty? new_uri.path = request_path.sub(%r(/[^/]*$), '/') + new_uri.path unless new_uri.path.start_with?('/') new_uri.scheme ||= @current_scheme new_uri.host ||= @current_host new_uri.port ||= @current_port unless new_uri.default_port == @current_port @current_scheme = new_uri.scheme @current_host = new_uri.host @current_port = new_uri.port reset_cache! send(method, new_uri.to_s, attributes, env.merge(options[:headers] || {})) end
process_and_follow_redirects(method, path, attributes = {}, env = {})
click to toggle source
# File lib/capybara/rack_test/browser.rb, line 35 def process_and_follow_redirects(method, path, attributes = {}, env = {}) process(method, path, attributes, env) if driver.follow_redirects? driver.redirect_limit.times do process(:get, last_response["Location"], {}, env) if last_response.redirect? end raise Capybara::InfiniteRedirectError, "redirected more than #{driver.redirect_limit} times, check for infinite redirects." if last_response.redirect? end end
reset_cache!()
click to toggle source
# File lib/capybara/rack_test/browser.rb, line 77 def reset_cache! @dom = nil end
reset_host!()
click to toggle source
# File lib/capybara/rack_test/browser.rb, line 70 def reset_host! uri = URI.parse(Capybara.app_host || Capybara.default_host) @current_scheme = uri.scheme @current_host = uri.host @current_port = uri.port end
submit(method, path, attributes)
click to toggle source
# File lib/capybara/rack_test/browser.rb, line 25 def submit(method, path, attributes) path = request_path if not path or path.empty? process_and_follow_redirects(method, path, attributes, {'HTTP_REFERER' => current_url}) end
title()
click to toggle source
# File lib/capybara/rack_test/browser.rb, line 99 def title if dom.respond_to? :title dom.title else #old versions of nokogiri don't have #title - remove in 3.0 dom.xpath('/html/head/title | /html/title').first.text end end
visit(path, attributes = {})
click to toggle source
# File lib/capybara/rack_test/browser.rb, line 20 def visit(path, attributes = {}) reset_host! process_and_follow_redirects(:get, path, attributes) end
Protected Instance Methods
build_rack_mock_session()
click to toggle source
# File lib/capybara/rack_test/browser.rb, line 110 def build_rack_mock_session reset_host! unless current_host Rack::MockSession.new(app, current_host) end
request_path()
click to toggle source
# File lib/capybara/rack_test/browser.rb, line 115 def request_path last_request.path rescue Rack::Test::Error "/" end