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
- #current_url ⇒ Object
- #dom ⇒ Object
- #find(format, selector) ⇒ Object
- #follow(method, path, attributes = {}) ⇒ Object
- #html ⇒ Object
-
#initialize(driver) ⇒ Browser
constructor
A new instance of Browser.
- #options ⇒ Object
- #process(method, path, attributes = {}, env = {}) ⇒ Object
- #process_and_follow_redirects(method, path, attributes = {}, env = {}) ⇒ Object
- #reset_cache! ⇒ Object
- #reset_host! ⇒ Object
- #submit(method, path, attributes) ⇒ Object
- #title ⇒ Object
- #visit(path, attributes = {}) ⇒ Object
Constructor Details
#initialize(driver) ⇒ Browser
Returns a new instance of Browser.
8 9 10 |
# File 'lib/capybara/rack_test/browser.rb', line 8 def initialize(driver) @driver = driver end |
Instance Attribute Details
#current_host ⇒ Object
Returns the value of attribute current_host.
6 7 8 |
# File 'lib/capybara/rack_test/browser.rb', line 6 def current_host @current_host end |
#driver ⇒ Object (readonly)
Returns the value of attribute driver.
5 6 7 |
# File 'lib/capybara/rack_test/browser.rb', line 5 def driver @driver end |
Instance Method Details
#app ⇒ Object
12 13 14 |
# File 'lib/capybara/rack_test/browser.rb', line 12 def app driver.app end |
#current_url ⇒ Object
64 65 66 67 68 |
# File 'lib/capybara/rack_test/browser.rb', line 64 def current_url last_request.url rescue Rack::Test::Error "" end |
#dom ⇒ Object
81 82 83 |
# File 'lib/capybara/rack_test/browser.rb', line 81 def dom @dom ||= Capybara::HTML(html) end |
#find(format, selector) ⇒ Object
85 86 87 88 89 90 91 |
# 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 = {}) ⇒ Object
30 31 32 33 |
# 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 ⇒ Object
93 94 95 96 97 |
# File 'lib/capybara/rack_test/browser.rb', line 93 def html last_response.body rescue Rack::Test::Error "" end |
#options ⇒ Object
16 17 18 |
# File 'lib/capybara/rack_test/browser.rb', line 16 def driver. end |
#process(method, path, attributes = {}, env = {}) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# 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([:headers] || {})) end |
#process_and_follow_redirects(method, path, attributes = {}, env = {}) ⇒ Object
35 36 37 38 39 40 41 42 43 |
# 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! ⇒ Object
77 78 79 |
# File 'lib/capybara/rack_test/browser.rb', line 77 def reset_cache! @dom = nil end |
#reset_host! ⇒ Object
70 71 72 73 74 75 |
# 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) ⇒ Object
25 26 27 28 |
# 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 ⇒ Object
99 100 101 102 103 104 105 106 |
# 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 = {}) ⇒ Object
20 21 22 23 |
# File 'lib/capybara/rack_test/browser.rb', line 20 def visit(path, attributes = {}) reset_host! process_and_follow_redirects(:get, path, attributes) end |