Module: Capybara
- Extended by:
- DSL
- Defined in:
- lib/capybara.rb,
lib/capybara/dsl.rb,
lib/capybara/query.rb,
lib/capybara/server.rb,
lib/capybara/session.rb,
lib/capybara/version.rb,
lib/capybara/selector.rb,
lib/capybara/node/base.rb,
lib/capybara/driver/node.rb,
lib/capybara/node/simple.rb,
lib/capybara/node/finders.rb,
lib/capybara/node/actions.rb,
lib/capybara/node/element.rb,
lib/capybara/node/matchers.rb,
lib/capybara/node/document.rb,
lib/capybara/rspec/matchers.rb,
lib/capybara/rspec/features.rb,
lib/capybara/util/save_and_open_page.rb
Defined Under Namespace
Modules: DSL, Driver, Features, Node, RSpecMatchers, RackTest, Selenium Classes: CapybaraError, DriverNotFoundError, ElementNotFound, ExpectationNotMet, FileNotFound, FrozenInTime, InfiniteRedirectError, LocateHiddenElementError, NotSupportedByDriverError, Query, Selector, Server, Session, TimeoutError, UnselectNotAllowed
Constant Summary
- VERSION =
'1.1.2'
Class Attribute Summary (collapse)
-
+ (Object) app
Returns the value of attribute app.
-
+ (Object) app_host
Returns the value of attribute app_host.
-
+ (Object) asset_root
Returns the value of attribute asset_root.
-
+ (Object) automatic_reload
Returns the value of attribute automatic_reload.
-
+ (Symbol) current_driver
(also: mode)
The name of the driver currently in use.
-
+ (Symbol) default_driver
The name of the driver to use by default.
-
+ (Object) default_host
Returns the value of attribute default_host.
-
+ (Object) default_selector
Returns the value of attribute default_selector.
-
+ (Object) default_wait_time
Returns the value of attribute default_wait_time.
-
+ (Object) ignore_hidden_elements
Returns the value of attribute ignore_hidden_elements.
-
+ (Symbol) javascript_driver
The name of the driver used when JavaScript is needed.
-
+ (Object) run_server
Returns the value of attribute run_server.
-
+ (Object) save_and_open_page_path
Returns the value of attribute save_and_open_page_path.
-
+ (Object) server_host
Returns the value of attribute server_host.
-
+ (Object) server_port
Returns the value of attribute server_port.
-
+ (Symbol) session_name
The current session name.
Class Method Summary (collapse)
-
+ (Object) add_selector(name) { ... }
Add a new selector to Capybara.
-
+ (Object) configure {|_self| ... }
Configure Capybara to suit your needs.
-
+ (Capybara::Session) current_session
The current Capybara::Session based on what is set as Capybara.app and Capybara.current_driver.
- + (Object) deprecate(method, alternate_method)
- + (Object) drivers
- + (Object) included(base)
-
+ (Object) register_driver(name) {|app| ... }
Register a new driver for Capybara.
-
+ (Object) reset_sessions!
(also: reset!)
Reset sessions, cleaning out the pool of sessions.
-
+ (Object) run_default_server(app, port)
Runs Capybara's default server for the given application and port under most circumstances you should not have to call this method manually.
- + (Object) save_and_open_page(html, file_name = nil)
- + (Object) save_page(html, file_name = nil)
-
+ (Object) server {|app, port| ... }
Register a proc that Capybara will call to run the Rack application.
-
+ (Capybara::Node::Simple) string(html)
Wraps the given string, which should contain an HTML document or fragment in a Node::Simple which exposes all Node::Matchers and Node::Finders.
-
+ (Object) use_default_driver
Use the default driver as the current driver.
-
+ (Object) using_driver(driver)
Yield a block using a specific driver.
-
+ (Object) using_session(name)
Yield a block using a specific session name.
-
+ (Object) using_wait_time(seconds)
Yield a block using a specific wait time.
Methods included from DSL
page, using_session, using_wait_time
Class Attribute Details
+ (Object) app
Returns the value of attribute app
24 25 26 |
# File 'lib/capybara.rb', line 24 def app @app end |
+ (Object) app_host
Returns the value of attribute app_host
19 20 21 |
# File 'lib/capybara.rb', line 19 def app_host @app_host end |
+ (Object) asset_root
Returns the value of attribute asset_root
19 20 21 |
# File 'lib/capybara.rb', line 19 def asset_root @asset_root end |
+ (Object) automatic_reload
Returns the value of attribute automatic_reload
22 23 24 |
# File 'lib/capybara.rb', line 22 def automatic_reload @automatic_reload end |
+ (Symbol) current_driver Also known as: mode
The name of the driver currently in use
198 199 200 |
# File 'lib/capybara.rb', line 198 def current_driver @current_driver || default_driver end |
+ (Symbol) default_driver
The name of the driver to use by default
190 191 192 |
# File 'lib/capybara.rb', line 190 def default_driver @default_driver || :rack_test end |
+ (Object) default_host
Returns the value of attribute default_host
19 20 21 |
# File 'lib/capybara.rb', line 19 def default_host @default_host end |
+ (Object) default_selector
Returns the value of attribute default_selector
21 22 23 |
# File 'lib/capybara.rb', line 21 def default_selector @default_selector end |
+ (Object) default_wait_time
Returns the value of attribute default_wait_time
21 22 23 |
# File 'lib/capybara.rb', line 21 def default_wait_time @default_wait_time end |
+ (Object) ignore_hidden_elements
Returns the value of attribute ignore_hidden_elements
21 22 23 |
# File 'lib/capybara.rb', line 21 def ignore_hidden_elements @ignore_hidden_elements end |
+ (Symbol) javascript_driver
The name of the driver used when JavaScript is needed
207 208 209 |
# File 'lib/capybara.rb', line 207 def javascript_driver @javascript_driver || :selenium end |
+ (Object) run_server
Returns the value of attribute run_server
19 20 21 |
# File 'lib/capybara.rb', line 19 def run_server @run_server end |
+ (Object) save_and_open_page_path
Returns the value of attribute save_and_open_page_path
22 23 24 |
# File 'lib/capybara.rb', line 22 def save_and_open_page_path @save_and_open_page_path end |
+ (Object) server_host
Returns the value of attribute server_host
20 21 22 |
# File 'lib/capybara.rb', line 20 def server_host @server_host end |
+ (Object) server_port
Returns the value of attribute server_port
20 21 22 |
# File 'lib/capybara.rb', line 20 def server_port @server_port end |
+ (Symbol) session_name
The current session name.
269 270 271 |
# File 'lib/capybara.rb', line 269 def session_name @session_name ||= :default end |
Class Method Details
+ (Object) add_selector(name) { ... }
Add a new selector to Capybara. Selectors can be used by various methods in Capybara to find certain elements on the page in a more convenient way. For example adding a selector to find certain table rows might look like this:
Capybara.add_selector(:row) do
xpath { |num| ".//tbody/tr[#{num}]" }
end
This makes it possible to use this selector in a variety of ways:
find(:row, 3)
page.find('table#myTable').find(:row, 3).text
page.find('table#myTable').has_selector?(:row, 3)
within(:row, 3) { page.should have_content('$100.000') }
It might be convenient to specify that the selector is automatically chosen for certain values. This way you don't have to explicitly specify that you are looking for a row, or an id. Let's say we want Capybara to treat any Symbols sent into methods like find to be treated as though they were element ids. We could achieve this like so:
Capybara.add_selector(:id) do
xpath { |id| XPath.descendant[XPath.attr(:id) == id.to_s] }
match { |value| value.is_a?(Symbol) }
end
Now we can retrieve elements by id like this:
find(:post_123)
Note that this particular selector already ships with Capybara.
110 111 112 |
# File 'lib/capybara.rb', line 110 def add_selector(name, &block) Capybara::Selector.add(name, &block) end |
+ (Object) configure {|_self| ... }
Configure Capybara to suit your needs.
Capybara.configure do |config|
config.run_server = false
config.app_host = 'http://www.google.com'
end
Configurable options
- asset_root = String
-
Where static assets are located, used by save_and_open_page
- app_host = String
-
The default host to use when giving a relative URL to visit
- run_server = Boolean
-
Whether to start a Rack server for the given Rack app (Default: true)
- default_selector = :css/:xpath
-
Methods which take a selector use the given type by default (Default: CSS)
- default_wait_time = Integer
-
The number of seconds to wait for asynchronous processes to finish (Default: 2)
- ignore_hidden_elements = Boolean
-
Whether to ignore hidden elements on the page (Default: false)
- automatic_reload = Boolean
-
Whether to automatically reload elements as Capybara is waiting (Default: true)
- save_and_open_page_path = String
-
Where to put pages saved through save_and_open_page (Default: Dir.pwd)
DSL Options
when using capybara/dsl, the following options are also available:
- default_driver = Symbol
-
The name of the driver to use by default. (Default: :rack_test)
- javascript_driver = Symbol
-
The name of a driver to use for JavaScript enabled tests. (Default: :selenium)
53 54 55 |
# File 'lib/capybara.rb', line 53 def configure yield self end |
+ (Capybara::Session) current_session
The current Capybara::Session based on what is set as Capybara.app and Capybara.current_driver
249 250 251 |
# File 'lib/capybara.rb', line 249 def current_session session_pool["#{current_driver}:#{session_name}:#{app.object_id}"] ||= Capybara::Session.new(current_driver, app) end |
+ (Object) deprecate(method, alternate_method)
289 290 291 |
# File 'lib/capybara.rb', line 289 def deprecate(method, alternate_method) warn "DEPRECATED: ##{method} is deprecated, please use ##{alternate_method} instead" end |
+ (Object) drivers
114 115 116 |
# File 'lib/capybara.rb', line 114 def drivers @drivers ||= {} end |
+ (Object) included(base)
284 285 286 287 |
# File 'lib/capybara.rb', line 284 def included(base) base.send(:include, Capybara::DSL) warn "`include Capybara` is deprecated. Please use `include Capybara::DSL` instead." end |
+ (Object) register_driver(name) {|app| ... }
Register a new driver for Capybara.
Capybara.register_driver :rack_test do |app|
Capybara::Driver::RackTest.new(app)
end
70 71 72 |
# File 'lib/capybara.rb', line 70 def register_driver(name, &block) drivers[name] = block end |
+ (Object) reset_sessions! Also known as: reset!
Reset sessions, cleaning out the pool of sessions. This will remove any session information such as cookies.
258 259 260 |
# File 'lib/capybara.rb', line 258 def reset_sessions! session_pool.each { |mode, session| session.reset! } end |
+ (Object) run_default_server(app, port)
Runs Capybara's default server for the given application and port under most circumstances you should not have to call this method manually.
175 176 177 178 179 180 181 182 183 184 |
# File 'lib/capybara.rb', line 175 def run_default_server(app, port) begin require 'rack/handler/thin' Thin::Logging.silent = true Rack::Handler::Thin.run(app, :Port => port) rescue LoadError require 'rack/handler/webrick' Rack::Handler::WEBrick.run(app, :Port => port, :AccessLog => [], :Logger => WEBrick::Log::new(nil, 0)) end end |
+ (Object) save_and_open_page(html, file_name = nil)
18 19 20 |
# File 'lib/capybara/util/save_and_open_page.rb', line 18 def save_and_open_page(html, file_name=nil) open_in_browser save_page(html, file_name) end |
+ (Object) save_page(html, file_name = nil)
3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# File 'lib/capybara/util/save_and_open_page.rb', line 3 def save_page(html, file_name=nil) file_name ||= "capybara-#{Time.new.strftime("%Y%m%d%H%M%S")}#{rand(10**10)}.html" name = File.join(*[Capybara.save_and_open_page_path, file_name].compact) unless Capybara.save_and_open_page_path.nil? || File.directory?(Capybara.save_and_open_page_path ) FileUtils.mkdir_p(Capybara.save_and_open_page_path) end FileUtils.touch(name) unless File.exist?(name) tempfile = File.new(name,'w') tempfile.write(rewrite_css_and_image_references(html)) tempfile.close tempfile.path end |
+ (Object) server {|app, port| ... }
Register a proc that Capybara will call to run the Rack application.
Capybara.server do |app, port|
require 'rack/handler/mongrel'
Rack::Handler::Mongrel.run(app, :Port => port)
end
By default, Capybara will try to run thin, falling back to webrick.
131 132 133 134 135 136 137 |
# File 'lib/capybara.rb', line 131 def server(&block) if block_given? @server = block else @server end end |
+ (Capybara::Node::Simple) string(html)
Wraps the given string, which should contain an HTML document or fragment in a Capybara::Node::Simple which exposes all Capybara::Node::Matchers and Capybara::Node::Finders. This allows you to query any string containing HTML in the exact same way you would query the current document in a Capybara session. For example:
node = Capybara.string <<-HTML
<ul>
<li id="home">Home</li>
<li id="projects">Projects</li>
</ul>
HTML
node.find('#projects').text # => 'Projects'
node.has_selector?('li#home', :text => 'Home')
node.has_selector?(:projects)
node.find('ul').find('li').text # => 'Home'
162 163 164 |
# File 'lib/capybara.rb', line 162 def string(html) Capybara::Node::Simple.new(html) end |
+ (Object) use_default_driver
Use the default driver as the current driver
215 216 217 |
# File 'lib/capybara.rb', line 215 def use_default_driver @current_driver = nil end |
+ (Object) using_driver(driver)
Yield a block using a specific driver
223 224 225 226 227 228 229 |
# File 'lib/capybara.rb', line 223 def using_driver(driver) previous_driver = Capybara.current_driver Capybara.current_driver = driver yield ensure @current_driver = previous_driver end |
+ (Object) using_session(name)
Yield a block using a specific session name.
277 278 279 280 281 282 |
# File 'lib/capybara.rb', line 277 def using_session(name) self.session_name = name yield ensure self.session_name = :default end |
+ (Object) using_wait_time(seconds)
Yield a block using a specific wait time
235 236 237 238 239 240 241 |
# File 'lib/capybara.rb', line 235 def using_wait_time(seconds) previous_wait_time = Capybara.default_wait_time Capybara.default_wait_time = seconds yield ensure Capybara.default_wait_time = previous_wait_time end |