Sha256: f2b06f6be2ed537129ff42db86fef849f75c2776d89b80f897be779e24c492e1
Contents?: true
Size: 1.74 KB
Versions: 3
Compression:
Stored size: 1.74 KB
Contents
require 'rutl/utilities' require 'rutl/base_page' # # Currently called Browser, this top-level class controls a browser and # a fake browser. It will soon call into apps, at which point I need to # rethink this naming convention. # class Browser include Utilities attr_reader :interface def initialize(type:, rutl_pages: RUTL::PAGES || ENV['RUTL_PAGES']) if rutl_pages.nil? || rutl_pages.empty? raise "Set RUTL::PAGES or ENV['RUTL_PAGES'] or pass dir as rutl_pages:" end # This is kind of evil. Figure out how to ditch the $ variable. $browser = self @interface = nil @interface = load_interface(type) @interface.pages = load_pages(dir: rutl_pages) end def load_interface(type) require "rutl/interface/#{type}_interface" klass = "#{type.to_s.capitalize}Interface" Object.const_get(klass).new end # Ugly. Requires files for page objects. Returns array of class names to load. def require_pages(dir: 'spec/pages') names = [] Dir["#{dir}/*"].each do |file| require "rutl/../../#{file}" File.open(file).each do |line| bingo = line.match(/class (.*) < BasePage/) names << bingo[1] if bingo && bingo[1] end end names end def load_pages(*) pages = [] require_pages.each do |klass| # Don't have @interface set yet. # That would have been the param to new, :interface. pages << Object.const_get(klass).new(@interface) end pages end def method_missing(method, *args, &block) if args.empty? @interface.send(method) else @interface.send(method, *args, &block) end end def respond_to_missing?(*args) @interface.respond_to?(*args) end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
rutl-0.3.0 | lib/rutl/browser.rb |
rutl-0.2.1 | lib/rutl/browser.rb |
rutl-0.2.0 | lib/rutl/browser.rb |