Sha256: 8d7f56024b14dc416596f143c253cda73e8831ba24c2fc4e413fb9702b3bdeec

Contents?: true

Size: 1.2 KB

Versions: 1

Compression:

Stored size: 1.2 KB

Contents

# encoding: utf-8
module Watir
  class ElementCollection
    include Enumerable

    def initialize(parent, element_class)
      @parent, @element_class = parent, element_class
    end

    def each(&blk)
      to_a.each(&blk)
    end

    def length
      elements.length
    end
    alias_method :size, :length

    def [](idx)
      to_a[idx] || @element_class.new(@parent, :index, idx)
    end

    #
    # First element of this collection
    #
    # @return Watir::BaseElement
    #

    def first
      to_a[0] || @element_class.new(@parent, :index, 0)
    end

    #
    # Last element of the collection
    #
    # @return Watir::BaseElement
    #

    def last
      to_a[-1] || @element_class.new(@parent, :index, -1)
    end

    #
    # This collection as an Array
    #
    # @return [Array<Watir::BaseElement>]
    #

    def to_a
      # TODO: optimize - lazily @element_class instance
      @to_a ||= elements.map { |e| @element_class.new(@parent, :element, e) }
    end

    private

    def elements
      @elements ||= ElementLocator.new(
        @parent.wd,
        @element_class.default_selector,
        @element_class.attribute_list
      ).locate_all
    end

  end # ElementCollection
end # Watir

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
watir-webdriver-0.0.1.dev4 lib/watir-webdriver/collections/element_collection.rb