lib/watir/image.rb in watir-1.6.2 vs lib/watir/image.rb in watir-1.6.5

- old
+ new

@@ -1,131 +1,131 @@ -module Watir - - # This class is the means of accessing an image on a page. - # Normally a user would not need to create this object as it is returned by the Watir::Container#image method - # - # many of the methods available to this object are inherited from the Element class - # - class Image < Element - def initialize(container, how, what) - set_container container - @how = how - @what = what - super nil - end - - def locate - if @how == :xpath - @o = @container.element_by_xpath(@what) - else - @o = @container.locate_tagged_element('IMG', @how, @what) - end - end - - # this method produces the properties for an image as an array - def image_string_creator - n = [] - n << "src:".ljust(TO_S_SIZE) + self.src.to_s - n << "file date:".ljust(TO_S_SIZE) + self.fileCreatedDate.to_s - n << "file size:".ljust(TO_S_SIZE) + self.fileSize.to_s - n << "width:".ljust(TO_S_SIZE) + self.width.to_s - n << "height:".ljust(TO_S_SIZE) + self.height.to_s - n << "alt:".ljust(TO_S_SIZE) + self.alt.to_s - return n - end - private :image_string_creator - - # returns a string representation of the object - def to_s - assert_exists - r = string_creator - r += image_string_creator - return r.join("\n") - end - - # this method returns the file created date of the image - def fileCreatedDate - assert_exists - return @o.invoke("fileCreatedDate") - end - - # this method returns the filesize of the image - def fileSize - assert_exists - return @o.invoke("fileSize").to_s - end - - # returns the width in pixels of the image, as a string - def width - assert_exists - return @o.invoke("width").to_s - end - - # returns the height in pixels of the image, as a string - def height - assert_exists - return @o.invoke("height").to_s - end - - # This method attempts to find out if the image was actually loaded by the web browser. - # If the image was not loaded, the browser is unable to determine some of the properties. - # We look for these missing properties to see if the image is really there or not. - # If the Disk cache is full (tools menu -> Internet options -> Temporary Internet Files), it may produce incorrect responses. - def hasLoaded? - locate - raise UnknownObjectException, "Unable to locate image using #{@how} and #{@what}" if @o == nil - return false if @o.fileCreatedDate == "" and @o.fileSize.to_i == -1 - return true - end - - # this method highlights the image (in fact it adds or removes a border around the image) - # * set_or_clear - symbol - :set to set the border, :clear to remove it - def highlight(set_or_clear) - if set_or_clear == :set - begin - @original_border = @o.border - @o.border = 1 - rescue - @original_border = nil - end - else - begin - @o.border = @original_border - @original_border = nil - rescue - # we could be here for a number of reasons... - ensure - @original_border = nil - end - end - end - private :highlight - - # This method saves the image to the file path that is given. The - # path must be in windows format (c:\\dirname\\somename.gif). This method - # will not overwrite a previously existing image. If an image already - # exists at the given path then a dialog will be displayed prompting - # for overwrite. - # Raises a WatirException if AutoIt is not correctly installed - # path - directory path and file name of where image should be saved - def save(path) - require 'watir/windowhelper' - WindowHelper.check_autoit_installed - @container.goto(src) - begin - thrd = fill_save_image_dialog(path) - @container.document.execCommand("SaveAs") - thrd.join(5) - ensure - @container.back - end - end - - def fill_save_image_dialog(path) - Thread.new do - system("ruby -e \"require 'win32ole'; @autoit=WIN32OLE.new('AutoItX3.Control'); waitresult=@autoit.WinWait 'Save Picture', '', 15; if waitresult == 1\" -e \"@autoit.ControlSetText 'Save Picture', '', '1148', '#{path}'; @autoit.ControlSend 'Save Picture', '', '1', '{ENTER}';\" -e \"end\"") - end - end - private :fill_save_image_dialog - end - +module Watir + + # This class is the means of accessing an image on a page. + # Normally a user would not need to create this object as it is returned by the Watir::Container#image method + # + # many of the methods available to this object are inherited from the Element class + # + class Image < Element + def initialize(container, how, what) + set_container container + @how = how + @what = what + super nil + end + + def locate + if @how == :xpath + @o = @container.element_by_xpath(@what) + else + @o = @container.locate_tagged_element('IMG', @how, @what) + end + end + + # this method produces the properties for an image as an array + def image_string_creator + n = [] + n << "src:".ljust(TO_S_SIZE) + self.src.to_s + n << "file date:".ljust(TO_S_SIZE) + self.fileCreatedDate.to_s + n << "file size:".ljust(TO_S_SIZE) + self.fileSize.to_s + n << "width:".ljust(TO_S_SIZE) + self.width.to_s + n << "height:".ljust(TO_S_SIZE) + self.height.to_s + n << "alt:".ljust(TO_S_SIZE) + self.alt.to_s + return n + end + private :image_string_creator + + # returns a string representation of the object + def to_s + assert_exists + r = string_creator + r += image_string_creator + return r.join("\n") + end + + # this method returns the file created date of the image + def file_created_date + assert_exists + return @o.invoke("fileCreatedDate") + end + + # this method returns the filesize of the image + def file_size + assert_exists + return @o.invoke("fileSize").to_s + end + + # returns the width in pixels of the image, as a string + def width + assert_exists + return @o.invoke("width").to_s + end + + # returns the height in pixels of the image, as a string + def height + assert_exists + return @o.invoke("height").to_s + end + + # This method attempts to find out if the image was actually loaded by the web browser. + # If the image was not loaded, the browser is unable to determine some of the properties. + # We look for these missing properties to see if the image is really there or not. + # If the Disk cache is full (tools menu -> Internet options -> Temporary Internet Files), it may produce incorrect responses. + def loaded? + locate + raise UnknownObjectException, "Unable to locate image using #{@how} and #{@what}" if @o == nil + return false if @o.fileCreatedDate == "" and @o.fileSize.to_i == -1 + return true + end + + # this method highlights the image (in fact it adds or removes a border around the image) + # * set_or_clear - symbol - :set to set the border, :clear to remove it + def highlight(set_or_clear) + if set_or_clear == :set + begin + @original_border = @o.border + @o.border = 1 + rescue + @original_border = nil + end + else + begin + @o.border = @original_border + @original_border = nil + rescue + # we could be here for a number of reasons... + ensure + @original_border = nil + end + end + end + private :highlight + + # This method saves the image to the file path that is given. The + # path must be in windows format (c:\\dirname\\somename.gif). This method + # will not overwrite a previously existing image. If an image already + # exists at the given path then a dialog will be displayed prompting + # for overwrite. + # Raises a WatirException if AutoIt is not correctly installed + # path - directory path and file name of where image should be saved + def save(path) + require 'watir/windowhelper' + WindowHelper.check_autoit_installed + @container.goto(src) + begin + thrd = fill_save_image_dialog(path) + @container.document.execCommand("SaveAs") + thrd.join(5) + ensure + @container.back + end + end + + def fill_save_image_dialog(path) + Thread.new do + system("ruby -e \"require 'win32ole'; @autoit=WIN32OLE.new('AutoItX3.Control'); waitresult=@autoit.WinWait 'Save Picture', '', 15; if waitresult == 1\" -e \"@autoit.ControlSetText 'Save Picture', '', '1148', '#{path}'; @autoit.ControlSend 'Save Picture', '', '1', '{ENTER}';\" -e \"end\"") + end + end + private :fill_save_image_dialog + end + end \ No newline at end of file