Class: Celerity::ElementCollection

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/celerity/element_collection.rb

Overview

This class is the superclass for the iterator classes (Buttons, Links, Spans etc.) It would normally only be accessed by the iterator methods (Browser#spans, Browser#links, …).

Instance Method Summary collapse

Constructor Details

#initialize(container, how = nil, what = nil) ⇒ ElementCollection

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of ElementCollection.



15
16
17
18
19
# File 'lib/celerity/element_collection.rb', line 15

def initialize(container, how = nil, what = nil)
  @container = container
  @object = (how == :object ? what : nil)
  @length = length
end

Instance Method Details

#[](n) ⇒ Celerity::Element

Get the element at the given index. By default, this is 1-indexed to keep compatibility with Watir.

Also note that because of Watir’s lazy loading, this will return an Element instance even if the index is out of bounds.



68
69
70
71
72
73
74
# File 'lib/celerity/element_collection.rb', line 68

def [](n)
  if @elements && @elements[n - Celerity.index_offset]
    element_class.new(@container, :object, @elements[n - Celerity.index_offset])
  else
    iterator_object(n - Celerity.index_offset)
  end
end

#each {|element| ... } ⇒ Object

Yield Parameters:



47
48
49
50
51
52
53
54
55
# File 'lib/celerity/element_collection.rb', line 47

def each
  if @elements
    @elements.each { |e| yield(element_class.new(@container, :object, e)) }
  else
    0.upto(@length - 1) { |i| yield iterator_object(i) }
  end

  @length
end

#empty?Boolean

Returns true if the collection is empty.



39
40
41
# File 'lib/celerity/element_collection.rb', line 39

def empty?
  length == 0
end

#firstCelerity::Element

Get the first element in this collection. (Celerity-specific)



82
83
84
# File 'lib/celerity/element_collection.rb', line 82

def first
  self[Celerity.index_offset]
end

#lastCelerity::Element

Get the last element in this collection. (Celerity-specific)



92
93
94
# File 'lib/celerity/element_collection.rb', line 92

def last
  self[Celerity.index_offset - 1]
end

#lengthFixnum Also known as: size



25
26
27
28
29
30
31
32
# File 'lib/celerity/element_collection.rb', line 25

def length
  if @object
    @object.length
  else
    @elements ||= ElementLocator.new(@container, element_class).elements_by_idents
    @elements.size
  end
end

#to_sString

Note: This can be quite useful in irb:

puts browser.text_fields


104
105
106
# File 'lib/celerity/element_collection.rb', line 104

def to_s
  map { |e| e.to_s }.join("\n")
end