class FireWatir::Document

Description:

Class for returning the document element.

Public Class Methods

new(container) click to toggle source

Description:

Creates new instance of Document class.
# File lib/firewatir/document.rb, line 14
def initialize(container)
  @length = 0
  @elements = nil
  @arr_elements = ""
  @container = container
end

Public Instance Methods

all() click to toggle source

Description:

Find all the elements in the document by querying DOM.
Set the class variables like length and the variable name of array storing the elements in JSSH.

Output:

Array of elements.
# File lib/firewatir/document.rb, line 53
    def all
      @arr_elements = "arr_coll_#{@@current_level}"
      jssh_command = "var arr_coll_#{@@current_level}=new Array(); "

      if(@container.class == FireWatir::Firefox || @container.class == Frame)
        jssh_command "                                if(element_collection != null && typeof(element_collection) != 'undefined')
                                {
                                    for (var i = 0; i < element_collection.length; i++)
                                    {
                                        if((element_collection[i].tagName != 'BR') && (element_collection[i].tagName != 'HR') && (element_collection[i].tagName != 'DOCTYPE') && (element_collection[i].tagName != 'META') && (typeof(element_collection[i].tagName) != 'undefined'))
                                            arr_coll_#{@@current_level}.push(element_collection[i]);
                                    }
                                }
                                arr_coll_#{@@current_level}.length;"
      else
        jssh_command <<"var element_collection = null; element_collection = #{@container.element_name}.getElementsByTagName(\"*\");
                                    if(element_collection!= null && typeof(element_collection) != 'undefined')
                                    {
                                        for (var i = 0; i < element_collection.length; i++)
                                        {
                                            if((element_collection[i].tagName != 'BR') && (element_collection[i].tagName != 'HR') && (element_collection[i].tagName != 'DOCTYPE') && (element_collection[i].tagName != 'META') && (typeof(element_collection[i].tagName) != 'undefined'))
                                            arr_coll_#{@@current_level}.push(element_collection[i]);
                                        }
                                    }
                                    arr_coll_#{@@current_level}.length;"
      end

      # Remove \n that are there in the string as a result of pressing enter while formatting.
      jssh_command.gsub!(/\n/, "")
      #puts  jssh_command
      jssh_socket.send("#{jssh_command};\n", 0)
      @length = read_socket().to_i;
      #puts "elements length is in locate_tagged_elements is : #{@length}"

      elements = nil
      elements = Array.new(@length)
      for i in 0..@length - 1 do
        temp = Element.new("arr_coll_#{@@current_level}[#{i}]", @container)
        elements[i] = temp
      end
      @@current_level += 1
      return elements

    end

    #
    # Description
    #   Returns the count of elements in the document.
    #
    # Output
    #   Count of elements found in the document.
    #
    def length
      return @length
    end
    alias_method :size, :length

    #
    # Description
    #   Iterates over elements in the document.
    #
    def each
      for i in 0..@length - 1
        yield Element.new("#{@arr_elements}[#{i}]", @container)
      end
    end

    #
    # Description
    #   Gets the element at the nth index in the array of the elements.
    #
    # Input
    #   n - Index of element you want to access. Index is 1 based.
    #
    # Output
    #   Element at the nth index.
    #
    def [](n)
      return Element.new("#{@arr_elements}[#{n-1}]", @container)
    end

    #
    # Description
    #   Get all forms available on the page.
    #   Used internally by Firewatir use ff.show_forms instead.
    #
    # Output
    #   Array containing Form elements
    #
    def get_forms()
      jssh_socket.send("var element_forms = #{@container.document_var}.forms; element_forms.length;\n", 0)
      length = read_socket().to_i
      forms = Array.new(length)

      for i in 0..length - 1 do
        forms[i] = Form.new(@container, :jssh_name, "element_forms[#{i}]")
      end
      return forms
    end

    #
    # Description
    #   Get all images available on the page.
    #   Used internally by Firewatir use ff.show_images instead.
    #
    # Output
    #   Array containing Image elements
    #
    def get_images
      return Images.new(@container)
    end

    #
    # Description
    #   Get all links available on the page.
    #   Used internally by Firewatir use ff.show_links instead.
    #
    # Output
    #   Array containing Link elements
    #
    def get_links
      return Links.new(@container)
    end

    #
    # Description
    #   Get all divs available on the page.
    #   Used internally by Firewatir use ff.show_divs instead.
    #
    # Output
    #   Array containing Div elements
    #
    def get_divs
      return Divs.new(@container)
    end

    #
    # Description
    #   Get all tables available on the page.
    #   Used internally by Firewatir use ff.show_tables instead.
    #
    # Output
    #   Array containing Table elements
    #
    def get_tables
      return Tables.new(@container)
    end

    #
    # Description
    #   Get all pres available on the page.
    #   Used internally by Firewatir use ff.show_pres instead.
    #
    # Output
    #   Array containing Pre elements
    #
    def get_pres
      return Pres.new(@container)
    end

    #
    # Description
    #   Get all spans available on the page.
    #   Used internally by Firewatir use ff.show_spans instead.
    #
    # Output
    #   Array containing Span elements
    #
    def get_spans
      return Spans.new(@container)
    end

    #
    # Description
    #   Get all labels available on the page.
    #   Used internally by Firewatir use ff.show_labels instead.
    #
    # Output
    #   Array containing Label elements
    #
    def get_labels
      return Labels.new(@container)
    end
    
  end # Docuemnt
end # FireWatir
"*\");
frames() click to toggle source
# File lib/firewatir/document.rb, line 21
def frames
  jssh_command = "var frameset = #{@container.window_var}.frames;
                  var elements_frames = new Array();
                  for(var i = 0; i < frameset.length; i++)
                  {
                      var frames = frameset[i].frames;
                      for(var j = 0; j < frames.length; j++)
                      {
                          elements_frames.push(frames[j].frameElement);    
                      }
                  }
                  elements_frames.length;"
  
  jssh_command.gsub!("\n", "")
  $jssh_socket.send("#{jssh_command};\n", 0)
  length = read_socket().to_i 
  
  frame_array = Array.new(length)
  for i in 0..length - 1 do
      frame_array[i] = Frame.new(self, :jssh_name, "elements_frames[#{i}]")
  end
  frame_array
end