lib/celerity/elements/frame.rb in celerity-0.0.1 vs lib/celerity/elements/frame.rb in celerity-0.0.2
- old
+ new
@@ -1,43 +1,40 @@
module Celerity
class Frame < Element
include Container
attr_accessor :page
- TAGS = {'frame' => nil, 'iframe' => nil}
+
+ TAGS = [Identifier.new('frame'), Identifier.new('iframe')]
+
ATTRIBUTES = BASE_ATTRIBUTES | [:longdesc, :name, :src, :frameborder, :marginwidth, :marginheight, :noresize, :scrolling]
DEFAULT_HOW = :name
def locate
- # Log.debug(@container.object.inspect)
- frame_elements = @container.object.getByXPath(".//iframe | .//frame").collect { |frame| frame.getEnclosedWindow.getFrameElement }
- unless frame_elements.empty?
- case @how
- when :id, :name, :src, :class
- matching_frame_elements = frame_elements.select { |frame_element| matches?(frame_element.getAttribute(@how.to_s), @what) }
- if @frame_element = matching_frame_elements.first
- @object = @frame_element.getEnclosedPage.getDocumentElement
- end
- when :index
- if @frame_element = frame_elements[@what-1]
- @object = @frame_element.getEnclosedPage.getDocumentElement
- end
- when :xpath
- raise NotImplementedError
- else
- raise MissingWayOfFindingObjectException
+ super
+ if @object
+ @inline_frame_object = @object.getEnclosedWindow.getFrameElement
+ if (frame = @object.getEnclosedPage.getDocumentElement)
+ @object = frame
+ else
+ @object = nil
end
end
- raise UnknownFrameException unless @object
end
+ def assert_exists
+ locate unless @object
+ unless @object
+ raise UnknownFrameException, "unable to locate frame, using #{identifier_string}"
+ end
+ end
+
def update_page(value)
- # Log.debug(value.asXml)
@page_container.set_page(value.getEnclosingWindow.getTopWindow.getEnclosedPage)
end
def to_s
assert_exists
- create_string(@frame_element)
+ create_string(@inline_frame_object)
end
end
end
\ No newline at end of file