Sha256: 23f97cdf7ac593a2ae62df103bce6791d7b9a058533d713bf13ab40439a5ab6a

Contents?: true

Size: 1.94 KB

Versions: 2

Compression:

Stored size: 1.94 KB

Contents

module PageObject
  module Elements
    #
    # Contains functionality that is common across all elements.
    #
    # @see PageObject::Platforms::WatirElement for the Watir version of all common methods
    # @see PageObject::Platforms::SeleniumElement for the Selenium version of all common methods
    #
    class Element
      attr_reader :element
      
      def initialize(element, platform)
        @element = element
        include_platform_for platform
      end
      
      # @private
      def self.watir_identifier_for identifier
        identifier_for identifier, watir_finders, watir_mapping
      end

      # @private
      def self.selenium_identifier_for identifier
        identifier = identifier_for identifier, selenium_finders, selenium_mapping
        return identifier.keys.first, identifier.values.first
      end
      
      protected

      def self.identifier_for identifier, find_by, find_by_mapping
        how, what = identifier.keys.first, identifier.values.first
        return how => what if find_by.include? how
        return find_by_mapping[how] => what if find_by_mapping[how]
        return nil => what
      end
      
      def self.watir_finders
        [:class, :id, :index, :name, :xpath]
      end
      
      def self.watir_mapping 
        {} 
      end
      
      def self.selenium_finders
        [:class, :id, :name, :xpath]
      end
      
      def self.selenium_mapping 
        {} 
      end
      
      def include_platform_for platform
        if platform[:platform] == :watir
          require 'page-object/platforms/watir_element'
          self.class.send :include, PageObject::Platforms::WatirElement
        elsif platform[:platform] == :selenium
          require 'page-object/platforms/selenium_element'
          self.class.send :include, PageObject::Platforms::SeleniumElement
        else
          raise ArgumentError, "expect platform to be :watir or :selenium"          
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
page-object-0.0.5 lib/page-object/elements/element.rb
page-object-0.0.4 lib/page-object/elements/element.rb