Thanks for the feedback everyone,

Heres another way of approaching the problem. This takes the current wait_until 
it makes it tolerant to exceptions. This seems to have the desired effect. I 
don't think this should be used for any real code, just food for thought.

require 'watir'   
include Watir

class Waiter
        def wait_until
                start_time = now
                
                begin
                        until yield do
                                timed_out?(start_time, timeout)
                        end
                rescue
                        if !timed_out?(start_time, timeout)
                                retry
                        end
                end
        end
        
        # this is kind of odd, there is no true!
        def timed_out?(incoming_start_time, incoming_timeout)
                duration = now - incoming_start_time
                
                if (duration) > incoming_timeout
                        raise Watir::Exception::TimeOutException.new(duration, 
incoming_timeout),
                        "Timed out after #{duration} seconds."
                else    
                        sleep @polling_interval
                        return( false )
                end
        end
end

ie = IE.new
ie.goto('http://www.google.com')

p wait_until(2){ true }
p wait_until(2){ ie.button(:name, 'btnG').exists? }

begin
        wait_until(2){ ie.frame('FakeFrame').exists? }
rescue Watir::Exception::TimeOutException
        puts "Can't find element"
end
_______________________________________________
Wtr-general mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/wtr-general

Reply via email to