Sha256: a0688caa74bce638eddcd8d467362107ef77da24f3a17e41db560c56f8423658

Contents?: true

Size: 1.73 KB

Versions: 2

Compression:

Stored size: 1.73 KB

Contents

require 'rutl/utilities'

#
# I might need to consider renaming these.
# The *interface classes lie between Browser and the webdriver-level classes.
#
class BaseInterface
  include Utilities

  attr_accessor :driver
  attr_accessor :pages

  def initialize
    raise 'Child interface class must set @driver.' if @driver.nil?
  end

  def goto(page)
    raise 'expect Page class' unless page.ancestors.include?(BasePage)
    find_page(page).go_to_here
  end

  def current_page
    raise 'define in child classes'
  end

  def method_missing(method, *args, &block)
    if args.empty?
      current_page.send(method)
    else
      current_page.send(method, *args, &block)
    end
  end

  # TODO: Is this needed? I not only find the page but also make sure the
  # urls match. Even though that's what finding pages means?
  def find_state(target_states)
    target_states.each do |state|
      next unless state.url == current_page.url
      page = find_page(state)
      return page if page.loaded?(@driver)
    end
    false
  end

  def find_page(page)
    @pages.each do |p|
      return p if page?(page) && p.class == page
      return p if String == page.class && page == p.url
    end
    raise "Page \"#{page}\" not found in pages #{@pages}"
  end

  def wait_for_transition(target_states)
    #
    # TODO: Should also see if there are other things to wait for.
    # I don't think this is doing page load time.
    #
    await -> { find_state target_states }
  end

  def respond_to_missing?(*args)
    # This can't be right. Figure it out later.
    current_page.respond_to?(*args)
  end

  def quit
    @driver.quit
    # Maybe I'm reusing pages from @pages?
    # @pages = []
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rutl-0.2.1 lib/rutl/interface/base_interface.rb
rutl-0.2.0 lib/rutl/interface/base_interface.rb