lib/watir/frame.rb in watir-1.8.0 vs lib/watir/frame.rb in watir-1.8.1.rc1
- old
+ new
@@ -1,56 +1,45 @@
module Watir
- class Frame
- include Container
+ class Frame < Element
include PageContainer
-
+
# Find the frame denoted by how and what in the container and return its ole_object
def locate
- how = @how
- what = @what
- frames = @container.document.frames
- target = nil
-
- for i in 0..(frames.length - 1)
- this_frame = frames.item(i)
- case how
- when :index
- index = i + 1
- return this_frame if index == what
- when :name
- begin
- return this_frame if what.matches(this_frame.name)
- rescue # access denied?
+ @o = nil
+ if @how == :xpath
+ @o = @container.element_by_xpath(@what)
+ elsif @how == :css
+ @o = @container.element_by_css(@what)
+ else
+ locator = FrameLocator.new(@container)
+ locator.set_specifier(@how, @what)
+ ['FRAME', 'IFRAME'].each do |frame_tag|
+ locator.tag = frame_tag
+ located_frame, document = locator.locate
+ unless (located_frame.nil? && document.nil?)
+ @o = located_frame
+ @document = document.document
+ break
end
- when :id
- # We assume that pages contain frames or iframes, but not both.
- this_frame_tag = @container.document.getElementsByTagName("FRAME").item(i)
- return this_frame if this_frame_tag and what.matches(this_frame_tag.invoke("id"))
- this_iframe_tag = @container.document.getElementsByTagName("IFRAME").item(i)
- return this_frame if this_iframe_tag and what.matches(this_iframe_tag.invoke("id"))
- when :src
- this_frame_tag = @container.document.getElementsByTagName("FRAME").item(i)
- return this_frame if this_frame_tag and what.matches(this_frame_tag.src)
- this_iframe_tag = @container.document.getElementsByTagName("IFRAME").item(i)
- return this_frame if this_iframe_tag and what.matches(this_iframe_tag.src)
- else
- raise ArgumentError, "Argument #{how} not supported"
end
end
-
- raise UnknownFrameException, "Unable to locate a frame with #{how.to_s} #{what}"
end
-
+
+ def ole_inner_elements
+ document.body.all
+ end
+ private :ole_inner_elements
+
def initialize(container, how, what)
set_container container
@how = how
@what = what
- @o = locate
copy_test_config container
end
def document
- @o.document
+ assert_exists
+ @document
end
def attach_command
@container.page_container.attach_command + ".frame(#{@how.inspect}, #{@what.inspect})".gsub('"','\'')
end
\ No newline at end of file