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.

Parameters:

  • n (Fixnum)

    Index of wanted element, 1-indexed unless Celerity.index_offset is changed.

Returns:



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.

Returns:

  • (Boolean)


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)

Returns:



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)

Returns:



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

def last
  self[Celerity.index_offset - 1]
end

#lengthFixnum Also known as: size

Returns The number of elements in this collection.

Returns:

  • (Fixnum)

    The number of elements in this collection.



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

Returns:

  • (String)

    A string representation of all elements in this collection.



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

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