Is it possible to globally increase Watir-Webdriver when_present wait time?

后端 未结 1 1438
终归单人心
终归单人心 2021-01-18 06:58

I am writing an automated testing program which will test some web programs that are sometimes slow to load certain AJAX calls. For instance the user will click \'Query\' wh

1条回答
  •  清歌不尽
    2021-01-18 07:46

    Update: This monkey patch has been merged into watir-webdriver and so will no longer be needed in watir-webdriver v0.6.5. You will be able to set the timeout using:

    Watir.default_timeout = 90
    

    The wait methods are defined similar to:

    def when_present(timeout = 30)
      message = "waiting for #{selector_string} to become present"
    
      if block_given?
        Watir::Wait.until(timeout, message) { present? }
        yield self
      else
        WhenPresentDecorator.new(self, timeout, message)
      end
    end
    

    As you can see, the default timeout of 30 seconds is hard-coded. Therefore, there is no easy way to change it everywhere.

    However, you could monkey patch the wait methods to use a default time and set it to what you want. The following monkey patch will set the default timeout to 90 seconds.

    require 'watir-webdriver'
    module Watir
    
      # Can be changed within a script with Watir.default_wait_time = 30    
      @default_wait_time = 90  
      class << self
        attr_accessor :default_wait_time    
      end
    
      module Wait
    
        class << self
          alias old_until until
          def until(timeout = Watir.default_wait_time, message = nil, &block)
            old_until(timeout, message, &block)
          end
    
          alias old_while while
          def while(timeout = Watir.default_wait_time, message = nil, &block)
            old_while(timeout, message, &block)
          end
    
        end # self
      end # Wait
    
      module EventuallyPresent
    
        alias old_when_present when_present
        def when_present(timeout = Watir.default_wait_time, &block)
          old_when_present(timeout, &block)
        end
    
        alias old_wait_until_present wait_until_present
        def wait_until_present(timeout = Watir.default_wait_time)
          old_wait_until_present(timeout)
        end
    
        alias old_wait_while_present wait_while_present
        def wait_while_present(timeout = Watir.default_wait_time)
          old_wait_while_present(timeout)
        end
    
      end # EventuallyPresent
    end # Watir
    

    Include the patch after the watir webdriver code is loaded.

    0 讨论(0)
提交回复
热议问题