使用中的宝石:
- 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 规避与系统相关的超时吗?