Ruby on rails 如何使用rpsec修复Ruby中Selenium Webdriver中过期的执行

Ruby on rails 如何使用rpsec修复Ruby中Selenium Webdriver中过期的执行,ruby-on-rails,ruby,selenium,Ruby On Rails,Ruby,Selenium,我试着运行一个测试,回答用angularjs完成的表单。 当我运行测试时,过了一段时间后,我一直得到如下错误。我试图用StandardError捕获异常,但我想找出解决此问题的方法 Ruby:Ruby 2.1.5p273(2014-11-13修订版48405)[i386-mingw32] Selenium:SeleniumServerStandalone-2.47.1.jar和SeleniumServerStandalone-3.4.0.jar (我尝试了两个Selenium服务器,看看最新

我试着运行一个测试,回答用angularjs完成的表单。 当我运行测试时,过了一段时间后,我一直得到如下错误。我试图用StandardError捕获异常,但我想找出解决此问题的方法

  • Ruby:Ruby 2.1.5p273(2014-11-13修订版48405)[i386-mingw32]
  • Selenium:SeleniumServerStandalone-2.47.1.jar和SeleniumServerStandalone-3.4.0.jar
(我尝试了两个Selenium服务器,看看最新的服务器是否能够修复它,但没有运气)


您能否显示导致此错误的代码?它看起来将在./lib/api/page_model.rb的第175行左右。请参阅上面更新的代码。
Failure/Error: base_question.complete
         Timeout::Error:
           execution expired
         # ./lib/api/page_model.rb:175:in 'sleep'
         # ./lib/api/page_model.rb:175:in 'block in until'
         # C:/Ruby21/lib/ruby/2.1.0/timeout.rb:91:in 'block in timeout'
         # C:/Ruby21/lib/ruby/2.1.0/timeout.rb:35:in 'block in catch'
         # C:/Ruby21/lib/ruby/2.1.0/timeout.rb:35:in 'catch'
         # C:/Ruby21/lib/ruby/2.1.0/timeout.rb:35:in 'catch'
         # C:/Ruby21/lib/ruby/2.1.0/timeout.rb:106:in 'timeout'
         # ./lib/api/page_model.rb:170:in 'until'
         # ./lib/api/ais_page_model.rb:951:in 'answer'
         # ./lib/api/ais_page_model.rb:812:in 'complete'
         # ./lib/api/ais_page_model.rb:676:in 'complete'
         # ./spec/core/ui/multithread/answers.rb:178:in 'block (2 levels) in <top (required)>'
         # ./lib/patches/rspec.rb:24:in 'instance_eval'
         # ./lib/patches/rspec.rb:24:in 'block in run'
         # C:/Ruby21/lib/ruby/gems/2.1.0/gems/rspec-core-2.11.1/lib/rspec/core/example.rb:253:in 'with_around_each_hooks'
         # ./lib/patches/rspec.rb:21:in 'run'
         # C:/Ruby21/lib/ruby/gems/2.1.0/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:378:in 'block in run_examples'
         # C:/Ruby21/lib/ruby/gems/2.1.0/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:374:in 'map'
         # C:/Ruby21/lib/ruby/gems/2.1.0/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:374:in 'run_examples'
         # C:/Ruby21/lib/ruby/gems/2.1.0/gems/rspec-core-2.11.1/lib/rspec/core/example_group.rb:360:in 'run'
         # C:/Ruby21/lib/ruby/gems/2.1.0/gems/rspec-core-2.11.1/lib/rspec/core/command_line.rb:28:in 'block (2 levels) in run'
         # C:/Ruby21/lib/ruby/gems/2.1.0/gems/rspec-core-2.11.1/lib/rspec/core/command_line.rb:28:in 'map'
         # C:/Ruby21/lib/ruby/gems/2.1.0/gems/rspec-core-2.11.1/lib/rspec/core/command_line.rb:28:in 'block in run'
         # C:/Ruby21/lib/ruby/gems/2.1.0/gems/rspec-core-2.11.1/lib/rspec/core/reporter.rb:34:in 'report'
         # C:/Ruby21/lib/ruby/gems/2.1.0/gems/rspec-core-2.11.1/lib/rspec/core/command_line.rb:25:in 'run'
         # C:/Ruby21/lib/ruby/gems/2.1.0/gems/rspec-core-2.11.1/lib/rspec/core/runner.rb:69:in 'run'
         # C:/Ruby21/lib/ruby/gems/2.1.0/gems/rspec-core-2.11.1/lib/rspec/core/runner.rb:8:in 'block in autorun'
def until
  raise NestedWaitCallError if Kernel.caller.any? { |caller| caller.include?(__method__.to_s) }
  raise "no block given" unless block_given?
  Timeout::timeout(self) do
    delay = 0.1
    begin
     until yield
       sleep delay
       delay *= 2
     end
     rescue Selenium::WebDriver::Error::NoSuchElementError, Selenium::WebDriver::Error::StaleElementReferenceError
     sleep delay
     delay *= 2
     retry
    end
  end
end