Hi, Gary.
It's known issue under IE.
Watir.rb should be changed in order to work with IE in the same as with Firefox - using oleobject.
Following is our variant of watir.rb lib:
----------------------------------------------------------------------
require 'rubygems'
require 'watir'
require 'funfx'
module Watir
# Watir extension for FunFX. Allows lookup of FlexApp objects via FunFX::Browser::FlexAppLookup#flex_app.
class IE
include FunFX::Browser::FlexAppLookup
def platform_flex_app(dom_id, app_name)
FlexApp.new(self, dom_id, app_name)
end
class FlexApp < Element #:nodoc:
include FunFX::Flex::Elements
include FunFX::Flex::FlexAppId
def initialize(ole_object, dom_id, app_name)
super(ole_object)
@ole_obj = ole_object
@dom_id = dom_id
find_flex
@app_name = app_name
end
def fire_event(flex_locator, event_name, args) # :nodoc:
js = %|funfx_property=document.getElementById("#{@dom_id}").fireFunFXEvent(#{flex_locator}, #{event_name.inspect}, "#{args}");|
exec_script(js)
end
def get_property_value(flex_locator, property) # :nodoc:
js = %|funfx_property=document.getElementById("#{@dom_id}").getFunFXPropertyValue(#{flex_locator}, #{property.inspect});|
exec_script(js)
end
def get_tabular_property_value(flex_locator, property) # :nodoc:
js = %|funfx_property=document.getElementById("#{@dom_id}").getFunFXTabularPropertyValue(#{flex_locator}, #{property.inspect});\n|
exec_script(js)
end
def invoke_tabular_method(flex_locator, method_name, *args) # :nodoc:
js = %|funfx_property=document.getElementById("#{@dom_id}").invokeFunFXTabularMethod(#{flex_locator}, #{method_name.inspect},
exec_script(js)
end
private
def exec_script(js)
begin
@ole_obj.ie.Document.parentWindow.execScript(js)
return @ole_obj.ie.Document.parentWindow.funfx_property
rescue WIN32OLERuntimeError => e
if e.message =~/unknown property or method 'funfx_property'/ || (e.message =~/funfx_property/ && e.message =~/Member not found/i)
find_flex
end
#TODO. Maybe it is better to raise FunFXError instead of WIN32OLERuntimeError
raise e
end
end
def find_flex
@flex_object = @ole_obj.ie.Document.getElementsByName(@dom_id).item(0)
raise AppNotFoundError.new("Couldn't find Flex object with id #{@dom_id.inspect}") if @flex_object.nil?
return true
end
end
end
end
---------------------------------------------------
Note that we add "Errors" module to the "element.rb" lib inside "Flex" module. And we include this module to the Element class ("include FunFX::Flex::Errors") inside element.rb
Following is fragment from "element.rb"
--------------
module FunFX
module Flex
module Errors
class FunFXError < StandardError; end
class CouldNotFindElementError < FunFXError; end
class AppNotFoundError < FunFXError; end
end
# Base class for all Flex proxy elements
class Element
include FunFX::Flex::Errors
#other code from element.rb....
....
-------------------
Files are located in
...\Ruby\lib\ruby\gems\1.8\gems\funfx-0.2.2\lib\funfx\browser\watir.rb
...\Ruby\lib\ruby\gems\1.8\gems\funfx-0.2.2\lib\funfx\flex\element.rb
I wish this will resolve your issue.
Good luck,
Pavel