加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

/usr/lib/ruby/1.9.1/net/protocol.rb:146:在`rbuf_fill中救援

发布时间:2020-12-17 03:04:00 所属栏目:百科 来源:网络整理
导读:我正在使用Capybara(Selenium驱动程序)访问网站上的某些页面.我只需点击数组中的每个项目,然后单击后退按钮.它很好,但每次经过一些迭代后它就会破坏. 这是代码: all(:xpath,'//table[@class="griglia_bordata"]//tr[td]/td/a[1]').each do |a| a_js_functio
我正在使用Capybara(Selenium驱动程序)访问网站上的某些页面.我只需点击数组中的每个项目,然后单击后退按钮.它很好,但每次经过一些迭代后它就会破坏.
这是代码:

all(:xpath,'//table[@class="griglia_bordata"]//tr[td]/td/a[1]').each do |a|
  a_js_functions << a[:href]
end
a_js_functions.each do |js_for_model|
  puts js_for_model
  page.execute_script js_for_model
  find(:xpath,"//a[text()='Check availability']").click
  puts find(".testo_grande_blu_B").text
  puts "--------------------------------------------"
  find(:xpath,"//a[text()='Back']").click
end

我有输出:

javascript:selectModel(‘130254’) Style: RB2132
——————————————– javascript:selectModel(‘309257’) Style: RB2140
——————————————– javascript:selectModel(‘68238’) Style: RB3016
——————————————– javascript:selectModel(‘68248’) Style: RB3025
——————————————– javascript:selectModel(‘68293’) Style: RB3026
——————————————– javascript:selectModel(‘68320’) Style: RB3044
——————————————– javascript:selectModel(‘68460’)
/usr/lib/ruby/1.9.1/net/protocol.rb:146:in rescue in rbuf_fill':
Timeout::Error (Timeout::Error) from
/usr/lib/ruby/1.9.1/net/protocol.rb:140:in
rbuf_fill’ from
/usr/lib/ruby/1.9.1/net/protocol.rb:122:in readuntil' from
/usr/lib/ruby/1.9.1/net/protocol.rb:132:in
readline’ from
/usr/lib/ruby/1.9.1/net/http.rb:2562:in read_status_line' from
/usr/lib/ruby/1.9.1/net/http.rb:2551:in
read_new’ from
/usr/lib/ruby/1.9.1/net/http.rb:1319:in block in transport_request'
from /usr/lib/ruby/1.9.1/net/http.rb:1316:in
catch’ from
/usr/lib/ruby/1.9.1/net/http.rb:1316:in transport_request' from
/usr/lib/ruby/1.9.1/net/http.rb:1293:in
request’ from
/usr/lib/ruby/1.9.1/net/http.rb:1286:in block in request' from
/usr/lib/ruby/1.9.1/net/http.rb:745:in
start’ from
/usr/lib/ruby/1.9.1/net/http.rb:1284:in request' from
/var/lib/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/default.rb:82:in
response_for’ from
/var/lib/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/default.rb:38:in
request' from
/var/lib/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/http/common.rb:40:in
call’ from
/var/lib/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb:598:in
raw_execute' from
/var/lib/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb:576:in
execute’ from
/var/lib/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/remote/bridge.rb:554:in
find_elements_by' from
/var/lib/gems/1.9.1/gems/selenium-webdriver-2.25.0/lib/selenium/webdriver/common/search_context.rb:62:in
find_elements’ from
/var/lib/gems/1.9.1/gems/capybara-1.1.2/lib/capybara/selenium/driver.rb:52:in
find' from
/var/lib/gems/1.9.1/gems/capybara-1.1.2/lib/capybara/node/finders.rb:158:in
find_in_base’ from
/var/lib/gems/1.9.1/gems/capybara-1.1.2/lib/capybara/node/finders.rb:137:in
block in first' from
/var/lib/gems/1.9.1/gems/capybara-1.1.2/lib/capybara/node/finders.rb:136:in
each’ from
/var/lib/gems/1.9.1/gems/capybara-1.1.2/lib/capybara/node/finders.rb:136:in
first' from
/var/lib/gems/1.9.1/gems/capybara-1.1.2/lib/capybara/node/finders.rb:27:in
block in find’ from
/var/lib/gems/1.9.1/gems/capybara-1.1.2/lib/capybara/node/base.rb:46:in
wait_until' from
/var/lib/gems/1.9.1/gems/capybara-1.1.2/lib/capybara/node/finders.rb:27:in
find’ from (eval):2:in find' from
/var/lib/gems/1.9.1/gems/capybara-1.1.2/lib/capybara/dsl.rb:161:in
find’ from
/home/biske/workspace/ScrapingGlasses/lib/luxottica.rb:39:in block in
scrape' from
/home/biske/workspace/ScrapingGlasses/lib/luxottica.rb:36:in
each’
from /home/biske/workspace/ScrapingGlasses/lib/luxottica.rb:36:in
scrape' from
/home/biske/workspace/ScrapingGlasses/lib/luxottica.rb:12:in
go’
from /home/biske/workspace/ScrapingGlasses/lib/luxottica.rb:48:in
`’

解决方法

我之前看到过类似的痕迹和2个可能的原因:

1)像FakeWeb和WebMock这样的宝石修改了ruby的http.尝试删除那些您可能用来模拟/阻止Web请求的宝石和任何类似的宝石.

2)我在一个真正加载的系统中看到了一个案例,这个超时会在某种程度上随机发生.真的,这里的问题不是测试,而是系统及其上运行的内容.可以更改http库使用的超时并继续测试.

更新为Capybara :(从http://selenium.googlecode.com/svn/wiki/RubyBindings.wiki)

Capybara.register_driver :selenium_extended_http_timeout do |app|
    client = Selenium::WebDriver::Remote::Http::Default.new
    client.timeout = 240
    Capybara::Selenium::Driver.new(app,:browser => :firefox,:http_client => client,:resynchronization_timeout => 60,:resynchronize => true)                                                                   
end
Capybara.javascript_driver = :selenium_extended_http_timeout

您很可能不需要重新同步的东西.

在这两种情况下,这都与硒如何进行内部沟通有关. JsonWireProtocol.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读