Sha256: d799ee725b251bef14d0d5293f6e9f78791a58519cce174f32d771c90a676ec1

Contents?: true

Size: 1.43 KB

Versions: 2

Compression:

Stored size: 1.43 KB

Contents

require "capybara"
require "mache/node"

module Mache
  # The Page class wraps an HTML page with an application-specific API. You can
  # extend it to define your own API for manipulating the pages of your web
  # application.
  #
  # @example
  #
  #   class WelcomePage < Mache::page
  #     element :main, "#main"
  #     component :nav, Nav, "#nav"
  #   end
  #
  #   page = WelcomePage.new(path: "/welcome")
  #   page.visit
  #   page.current # true
  #   page.main.text # lorem ipsum
  #
  class Page < Node
    # The path where the page is located, without any domain information.
    #
    # @return [String] the path string
    # @example
    #   "/welcome"
    #   "/users/sign_in"
    attr_reader :path

    # Returns a new page object.
    #
    # @param node [Capybara::Node] the Capybara node to attach to
    # @param path [String] the path where the page is located
    def initialize(node: Capybara.current_session, path: nil)
      @node ||= node
      @path ||= path
    end

    # Visits the page at its {#path}.
    #
    # @return [Page] the page object
    def visit
      @node.visit(path)
      self
    end

    # Tests whether the page is current.
    #
    # @return [Boolean] `true` if the page is current, `false` otherwise
    def current?
      @node.current_path == path
    end

    # Creates a new page object and calls {#visit} on it.
    #
    # @return [Page] the page object
    def self.visit
      new.visit
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mache-2.0.0 lib/mache/page.rb
mache-1.0.1 lib/mache/page.rb