class RUTL::Interface::Base

I might need to consider renaming these. The *interface classes lie between Application and the webdriver-level classes.

Attributes

camera[RW]
driver[RW]

RUTL::Driver

views[RW]

Array of all RUTL::View classes

Public Class Methods

new() click to toggle source
# File lib/rutl/interface/base.rb, line 25
def initialize
  raise 'Child interface class must set @driver.' if @driver.nil?
  # base_name avoids collisions when unning the same tests with
  # different applications
  name = self.class.to_s.sub('RUTL::Interface', '')
  @camera = Camera.new(@driver, base_name: name)
end

Public Instance Methods

current_view() click to toggle source

Should define in children; raises here. Should return the current view class.

# File lib/rutl/interface/base.rb, line 43
def current_view
  raise 'define in child classes'
end
find_state(target_states) click to toggle source

TODO: Is this needed? I not only find the view but also make sure the urls match. Even though that's what finding views means?

# File lib/rutl/interface/base.rb, line 57
def find_state(target_states)
  target_states.each do |state|
    next unless state.url == current_view.url
    view = find_view(state)
    return view if view.loaded?
  end
  false
end
find_view(view) click to toggle source

Attempts to find view by class or url.

# File lib/rutl/interface/base.rb, line 67
def find_view(view)
  @views.each do |p|
    return p if view?(view) && p.class == view
    return p if String == view.class && view == p.url
  end
  raise "View \"#{view}\" not found in views #{@views}"
end
goto(view) click to toggle source

Attempts to navigate to the view. Takes screenshot if successful.

# File lib/rutl/interface/base.rb, line 35
def goto(view)
  raise 'expect View class' unless view?(view)
  find_view(view).go_to_here
  @camera.screenshot
end
method_missing(method, *args, &block) click to toggle source
# File lib/rutl/interface/base.rb, line 47
def method_missing(method, *args, &block)
  if args.empty?
    current_view.send(method)
  else
    current_view.send(method, *args, &block)
  end
end
quit() click to toggle source
# File lib/rutl/interface/base.rb, line 90
def quit
  @driver.quit
end
respond_to_missing?(*args) click to toggle source
# File lib/rutl/interface/base.rb, line 85
def respond_to_missing?(*args)
  # This can't be right. Figure it out later.
  current_view.respond_to?(*args)
end
wait_for_transition(target_states) click to toggle source

Calls the polling utility mathod await() with a lambda trying to find the next state, probably a View class.

# File lib/rutl/interface/base.rb, line 77
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 view load time.
  #
  await -> { find_state target_states }
end