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

醉酒当歌 提交于 2019-12-19 18:56:22

问题


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' which will result in a HTML 'loading' overlay for anywhere from 15 to 90 seconds. When the search completes, it will then update a table on the same page with the results.

So obviously I can increase the waiting time individually like so:

browser.td(:id => 'someId').when_present.some_action #=> will wait 30 seconds
browser.td(:id => 'someId').when_present(90).some_action #=> will wait *90* seconds

But is there a way to modify (in my case increase) the time so Watir-Webdriver always waits 90 seconds on .when_present like so:

browser.some_default = 90
browser.td(:id => 'someId').when_present.some_action #=> will wait *90* seconds

A few words of warning: Client timeout will not affect when_present. Nor will implicit wait.


回答1:


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.



来源:https://stackoverflow.com/questions/19994867/is-it-possible-to-globally-increase-watir-webdriver-when-present-wait-time

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!