自从我开始开发测试以来,我一直在收到Timeout错误.起初我认为这与我的xpath的效率有关,但是在看到测试快速通过很多次后,我认为它与选择器无关.错误随机发生,并且通常在它发生时会在特征内多次发生.我需要修复或至少了解这个问题是什么.
步骤定义的示例:
When /^I navigate to "(.*)"$/ do |webpage| navigate_to(webpage) end
这是我得到的错误:
Timeout::Error (Timeout::Error) /usr/lib/ruby/1.9.1/net/protocol.rb:146:in `rescue in rbuf_fill' /usr/lib/ruby/1.9.1/net/protocol.rb:140:in `rbuf_fill' /usr/lib/ruby/1.9.1/net/protocol.rb:122:in `readuntil' /usr/lib/ruby/1.9.1/net/protocol.rb:132:in `readline' /usr/lib/ruby/1.9.1/net/http.rb:2562:in `read_status_line' /usr/lib/ruby/1.9.1/net/http.rb:2551:in `read_new' /usr/lib/ruby/1.9.1/net/http.rb:1319:in `block in transport_request' /usr/lib/ruby/1.9.1/net/http.rb:1316:in `catch' /usr/lib/ruby/1.9.1/net/http.rb:1316:in `transport_request' /usr/lib/ruby/1.9.1/net/http.rb:1293:in `request' /usr/lib/ruby/1.9.1/net/http.rb:1286:in `block in request' /usr/lib/ruby/1.9.1/net/http.rb:745:in `start' /usr/lib/ruby/1.9.1/net/http.rb:1284:in `request' ./features/support/env.rb:88:in `block in get_page_url'
env.rb:
require 'selenium-webdriver' require 'rubygems' require 'nokogiri' require 'rspec' require 'rspec/expectations' require 'httpclient' require 'fileutils.rb' require 'pathname' $driver = Selenium::WebDriver.for :ie #accept_next_alert = true $driver.manage.timeouts.implicit_wait = 300 $driver.manage.timeouts.script_timeout = 300 $driver.manage.timeouts.page_load = 300 #verification_errors = [] AfterStep do sleep 5 end at_exit do $driver.close end
关于这个相同的主题,我已经经历了很多问题,似乎没有一个答案可行,如果答案的话.
类似的问题.我试过这里提供的解决方案,但我的错误仍然存在
https://www.ruby-forum.com/topic/4414675
我试过添加显式等待:
http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp
我需要解决这个问题所以如果我不清楚任何事情,请提出问题.
以下是已安装宝石的列表:
archive-tar-minitar (0.5.2) bigdecimal (1.1.0) builder (3.2.0) bundler (1.3.5) childprocess (0.3.9) columnize (0.3.6) commonwatir (4.0.0) cucumber (1.2.3) debugger-linecache (1.2.0) debugger-ruby_core_source (1.2.2) diff-lcs (1.2.1) ffi (1.5.0,1.0.9) gherkin (2.11.6) hoe (3.6.2) httpclient (2.3.2) io-console (0.3) json (1.7.7) linecache19 (0.5.12) mime-types (1.23) mini_magick (3.6.0) mini_portile (0.5.0) minitest (2.12.1,2.5.1) multi_json (1.7.1) nokogiri (1.5.9) rack (1.5.2) rack-test (0.6.2) rake (10.0.3,0.9.6) rautomation (0.9.2) rb-readline (0.5.0) rdoc (3.12.1) rspec (2.13.0) rspec-core (2.13.1) rspec-expectations (2.13.0) rspec-mocks (2.13.0) ruby-debug-base19 (0.11.25) ruby-debug19 (0.11.6) ruby_core_source (0.1.5) rubygems-update (2.0.3) rubyzip (0.9.9) s4t-utils (1.0.4) selenium-webdriver (2.33.0,2.31.0) subexec (0.2.3) user-choices (1.1.6.1) watir (4.0.2) watir-classic (3.7.0) watir-webdriver (0.6.2) websocket (1.0.7) win32-api (1.4.8) win32-process (0.7.2) win32screenshot (1.0.8) windows-api (0.4.2) windows-pr (1.2.2) xml-simple (1.1.2) xpath (2.0.0)
解决方法
我已经编辑了env.rb,因为发布了这个并更新了问题的那一部分.这可能不是绝对的解决办法,但我已经注意到了这一点 – 我已经解决了问题的一部分.
我将env.rb中的超时从300更改为20.
$driver.manage.timeouts.implicit_wait = 20 $driver.manage.timeouts.script_timeout = 20 $driver.manage.timeouts.page_load = 20
一旦这样做,我的测试套件现在执行得更快,而不是冗长的超时错误我得到与我的代码有关的真正错误(糟糕的选择器,错误的方法等).
我以前用于简单导航到页面的超时已成为:
Timed out waiting for page to load. (Selenium::WebDriver::Error::TimeOutError)
哪个出现时间不到20秒,但可能是由于我与网页的连接.我将在不久的将来更多地研究这个错误.
如果有人试图这样做,请让我知道它是如何为你(即使它没有).随着我了解更多信息,我会不断更新.