微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

超时::在ruby中使用selenium-webdriver时出错

自从我开始开发测试以来,我一直在收到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秒,但可能是由于我与网页的连接.我将在不久的将来更多地研究这个错误.

如果有人试图这样做,请让我知道它是如何为你(即使它没有).随着我了解更多信息,我会不断更新.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐