当前位置: 首页 > 面试题库 >

是否可以全局增加Watir-Webdriver when_present等待时间?

陆俊迈
2023-03-14
问题内容

我正在编写一个自动化测试程序,该程序将测试某些Web程序,这些程序有时加载某些AJAX调用的速度很慢。例如,用户将单击“查询”,这将在15到90秒的任何时间产生HTML“加载”叠加。搜索完成后,它将使用结果更新同一页面上的表。

所以很明显我可以像这样单独增加等待时间:

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

但是有没有办法修改(在我的情况下增加)时间,因此Watir-Webdriver 总是 等待90秒,.when_present如下所示:

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

请注意以下几点:客户端超时不会影响
when_present


问题答案:

更新 :此猴子补丁已合并到watir-webdriver中,因此在watir-webdriver
v0.6.5中将不再需要。您将可以使用以下命令设置超时时间:

Watir.default_timeout = 90

在等待的方法是类似这样定义的:

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

如您所见,默认的30秒超时是硬编码的。因此,没有简单的方法可以在任何地方进行更改。

但是,您可以猴子修改wait方法以使用默认时间并将其设置为所需的时间。以下猴子补丁会将默认超时设置为90秒。

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

加载watir Webdriver代码后,请包括补丁。



 类似资料:
  • 问题内容: 我有一个Python程序,该程序通过 PySerial 模块从串行端口读取数据。我需要牢记的两个条件是:我不知道会有多少数据到达,并且我也不知道何时需要数据。 基于此,我提出了以下代码段: 因此,此代码将永远循环以从串行端口获取数据。我们最多可以存储500个字符,然后通过设置一个标志来警告主循环。如果没有数据,我们将回到睡眠状态并等待。 该代码正在运行,但是我不喜欢5s超时。我需要它是

  • 问题内容: Selenium隐式等待是否总是占据整个等待时间,还是可以更快地完成?如果我将隐式等待时间设置为10秒,则对.findElement的调用是否可以在几秒钟内完成,还是总是需要整整10秒钟? 该页面暗示它要等待整整10秒钟,这非常令人困惑,因为它不是javadoc所暗示的。 WebDriver.java的以下代码注释隐含了它的轮询操作可以比定义隐式超时更快的时间完成。但是, 评论中的最后

  • 我们有一个运行良好的C#FTP类,但是TCP端口快用完了,因为它们都处于等待时间状态,无法重用。我们可以减少注册表中的默认等待时间,但我们宁愿重用端口。 在服务器端套接字进入TIME-WAIT状态并且客户机在2MSL(默认TIME-WAIT时间)内重新连接到服务器的情况下,可能会发生以下两种情况: 1.服务器不会响应来自客户端的SYN数据包,因为套接字处于时间等待状态。 2.服务器可以接受来自客户

  • 我使用springdoc openapi for java SpringBoot RESTful应用程序定义了以下: 是否可以将其全局应用于所有路径,而不必在代码中的任何地方添加注释到注释? 如果是,如何添加排除到不安全的路径?

  • 它是100%保证的线程,首先得到wait_for_completion_timeout会唤醒第一次调用完成?也许我错了,但是我看了下面的场景:线程A调用wait_for_completion_timeout并进入睡眠。当完成被调用时,它醒来并完成执行在函数do_wait_for_common。现在假设另一个线程B调用wait_for_completion_timeout. x- 然后继续睡觉。所以

  • 问题内容: 我知道我可以这样做: 然后只需编写语句中所需的代码。 还有其他方法可以检查它们是否相等? 问题答案: 怎么了 if(!Arrays.equals(array1,array2)) 与相同,即是同一数组。这不是大多数人期望的。 比较数组的内容。