/usr/lib/ruby/1.9.1/net/protocol.rb:146: in `rescue in rbuf_fill ': Timeout :: Error (Timeout :: Error)

I use Capybara (Selenium driver) to visit some pages on the site. I just click on each element of the array and click on the back button. Everything is going well, but every time after a certain number of iterations it breaks. Here is the code:

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 

I have a conclusion:

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_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 '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 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 'of / 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 search '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 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 'of /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 ``

+4
source share
2 answers

I saw a similar trail before and 2 potential reasons for it:

1) gems such as FakeWeb and WebMock modify ruby โ€‹โ€‹http. Try to remove these gems and any similar ones that you can use to bully / block web requests.

2) I saw a case in a really busy system, where this timeout would occur somewhat randomly. In fact, the problem here was not a test, but a system and what worked on it. You can change the timeout used by the http library and continue testing.

Updated for Capybara: (from 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 

There is a good chance that you do not need re-sync materials.

In both cases, this is due to the way selenium performs some of its internal messages. JsonWireProtocol.

+6
source

I had a problem with Fakeweb and VCR, but after upgrading to selenium-webdriver (2.27.0) the timeouts were gone

0
source

Source: https://habr.com/ru/post/1440124/


All Articles