class Capybara::Node::Base

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

Attributes

base[R]
parent[R]
session[R]

Public Class Methods

new(session, base) click to toggle source
# File lib/capybara/node/base.rb, line 31
def initialize(session, base)
  @session = session
  @base = base
end

Public Instance Methods

reload() click to toggle source
# File lib/capybara/node/base.rb, line 36
def reload
  self
end

Protected Instance Methods

driver() click to toggle source
# File lib/capybara/node/base.rb, line 58
def driver
  session.driver
end
wait_until(seconds=Capybara.default_wait_time) { || ... } click to toggle source
# 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