0

使用中的宝石:

  • watir-webdriver-0.6.2
  • selenium-webdriver-2.27.2

在所有系统上使用 Firefox 16.0.2。

情况:我们有一个模态窗口,运行后会关闭

link(:text, 'Continue').click

系统 1:硬件概述:

  • 型号名称:MacBook Air
  • 型号标识符:MacBookAir4,2
  • 处理器名称:英特尔酷睿 i5
  • 处理器速度:1.7 GHz
  • 处理器数量:1
  • 核心总数:2
  • 内存:4 GB
  • 操作系统:OS X 10.8.2

系统 1 结果:总是成功

系统二:

  • 型号名称:MacBook Pro
  • 型号标识符:MacBookPro10,1
  • 处理器名称:英特尔酷睿 i7
  • 处理器速度:2.3 GHz
  • 处理器数量:1
  • 核心总数:4
  • 内存:16 GB
  • 操作系统:OS X 10.8.2

系统 2 结果:执行单击,然后在指定时间后抛出 Timeout::Error。

中间系统(对不起,我没有可用的完整规格)是一款新的 Mac Mini,也带有 Mountain Lion。这个系统一直失败,直到在试图追踪它时,我在产生超时的特定调用处添加了一个 puts 语句。当然,这导致了持续的成功状态,这表明了我们亲切地称之为 Heisenerror 的情况。

puts 语句被添加到 lib/selenium/webdriver/remote/bridge.rb 中的 selenium-webdriver 代码中,第 613 行附近,如下所示:

puts "-> #{verb.to_s.upcase} #{path}" if verb.to_s.upcase == 'POST'

这会打印出对浏览器发出的所有发布请求。超时的特定发布请求是点击请求之一。我没有完整的路径,但如果需要,会在星期一添加。

有人知道如何使用 watir/selenium 规避与系统相关的超时吗?

4

1 回答 1

1

也许使用 wait_until 方法等待加载页面

wait_until(:timeout => 20) { page.current_url =~ /some_url/ }

http://rubydoc.info/github/moredip/Frank/master/Frank/Cucumber/WaitHelper.wait_until

接着

find(".some_class").find('a', :text => /Continue/).click
于 2013-01-20T00:00:38.450 回答