A {Capybara::Node::Base} represents either an element on a page through the subclass {Capybara::Node::Element} or a document through {Capybara::Node::Document}.
Both types of Node share the same methods, used for interacting with the elements on the page. These methods are divided into three categories, finders, actions and matchers. These are found in the modules {Capybara::Node::Finders}, {Capybara::Node::Actions} and {Capybara::Node::Matchers} respectively.
A {Capybara::Session} exposes all methods from {Capybara::Node::Document} directly:
session = Capybara::Session.new(:rack_test, my_app) session.visit('/') session.fill_in('Foo', :with => 'Bar') # from Capybara::Node::Actions bar = session.find('#bar') # from Capybara::Node::Finders bar.select('Baz', :from => 'Quox') # from Capybara::Node::Actions session.has_css?('#foobar') # from Capybara::Node::Matchers
# File lib/capybara/node/base.rb, line 31 def initialize(session, base) @session = session @base = base end
# File lib/capybara/node/base.rb, line 36 def reload self end
# File lib/capybara/node/base.rb, line 58 def driver session.driver end
# File lib/capybara/node/base.rb, line 42 def wait_until(seconds=Capybara.default_wait_time) start_time = Time.now begin yield rescue => e raise e unless driver.wait? raise e unless (driver.respond_to?(:invalid_element_errors) and driver.invalid_element_errors.include?(e.class)) or e.is_a?(Capybara::ElementNotFound) raise e if (Time.now - start_time) >= seconds sleep(0.05) raise Capybara::FrozenInTime, "time appears to be frozen, Capybara does not work with libraries which freeze time, consider using time travelling instead" if Time.now == start_time reload if Capybara.automatic_reload retry end end