Class: Celerity::Frame

Inherits:
Element show all
Includes:
Container, XpathSupport
Defined in:
lib/celerity/elements/frame.rb

Constant Summary collapse

TAGS =
[Identifier.new('frame'), Identifier.new('iframe')]
ATTRIBUTES =
BASE_ATTRIBUTES | [
  :frameborder,
  :longdesc,
  :marginheight,
  :marginwidth,
  :name,
  :noresize,
  :scrolling,
  :src,
]
DEFAULT_HOW =
:name

Constants inherited from Element

Element::BASE_ATTRIBUTES, Element::CELLHALIGN_ATTRIBUTES, Element::CELLVALIGN_ATTRIBUTES, Element::HTML_401_TRANSITIONAL

Instance Attribute Summary collapse

Attributes included from Container

#browser

Attributes inherited from Element

#container

Instance Method Summary collapse

Methods included from XpathSupport

#element_by_xpath, #element_from_dom_node, #elements_by_xpath

Methods included from Container

#area, #areas, #button, #buttons, #cell, #cells, #check_box, #checkboxes, #container=, #contains_text, #dd, #dds, #del, #dels, #div, #divs, #dl, #dls, #dt, #dts, #em, #ems, #file_field, #file_fields, #form, #forms, #frame, #frames, #h1, #h1s, #h2, #h2s, #h3, #h3s, #h4, #h4s, #h5, #h5s, #h6, #h6s, #hidden, #hiddens, #image, #images, #ins, #inses, #inspect, #label, #labels, #li, #link, #links, #lis, #map, #maps, #meta, #metas, #ol, #ols, #option, #p, #pre, #pres, #ps, #radio, #radios, #row, #rows, #select_list, #select_lists, #span, #spans, #strong, #strongs, #table, #tables, #tbodies, #tbody, #text_field, #text_fields, #tfoot, #tfoots, #th, #thead, #theads, #ths, #ul, #uls

Methods included from ShortInspect

#short_inspect

Methods inherited from Element

#==, #attribute_string, #attribute_value, #exists?, #fire_event, #focus, #focused?, #initialize, #javascript_object, #methods, #object, #parent, #respond_to?, #text, #to_xml, #visible?, #xpath

Constructor Details

This class inherits a constructor from Celerity::Element

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(meth, *args, &blk) ⇒ Object



74
75
76
77
78
79
80
81
82
83
# File 'lib/celerity/elements/frame.rb', line 74

def method_missing(meth, *args, &blk)
  meth = selector_to_attribute(meth)
  if self.class::ATTRIBUTES.include?(meth)
    assert_exists
    @inline_frame_object.getAttribute(meth.to_s)
  else
    Log.warn "Element\#method_missing calling super with #{meth.inspect}"
    super
  end
end

Instance Attribute Details

#pageObject

Returns the value of attribute page.



6
7
8
# File 'lib/celerity/elements/frame.rb', line 6

def page
  @page
end

Instance Method Details

#assert_existsObject

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.

Override assert_exists to raise UnknownFrameException (for Watir compatibility)



42
43
44
45
46
47
# File 'lib/celerity/elements/frame.rb', line 42

def assert_exists
  locate
  unless @object
    raise UnknownFrameException, "unable to locate frame, using #{identifier_string}"
  end
end

#execute_script(source) ⇒ Object

Executes the given JavaScript string in this frame. (Celerity only)



53
54
55
56
# File 'lib/celerity/elements/frame.rb', line 53

def execute_script(source)
  assert_exists
  @page.executeJavaScript(source.to_s).getJavaScriptResult
end

#locateObject

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.

Override the default locate to handle frame and inline frames.



26
27
28
29
30
31
32
33
34
35
# File 'lib/celerity/elements/frame.rb', line 26

def locate
  super
  if @object
    @inline_frame_object = @object.getEnclosedWindow.getFrameElement
    self.page            = @object.getEnclosedPage
    if (frame = self.page.getDocumentElement)
      @object = frame
    end
  end
end

#to_sObject



69
70
71
72
# File 'lib/celerity/elements/frame.rb', line 69

def to_s
  assert_exists
  Celerity::Util.create_string @inline_frame_object
end

#update_page(value) ⇒ Object

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.

Updates the brwoser page with the page from this frame’s top window. Used internally.



65
66
67
# File 'lib/celerity/elements/frame.rb', line 65

def update_page(value)
  @browser.page = value.getEnclosingWindow.getTopWindow.getEnclosedPage
end