代码之家  ›  专栏  ›  技术社区  ›  Zack

ruby capybara::expectationnotmet:等待selenium会话重置失败/错误时超时

  •  0
  • Zack  · 技术社区  · 6 年前

    我不断地在ci上出现片状错误,而我的selenium会话没有重新启动。我在本地运行测试时没有这个问题。它只发生在我的ci服务器上。

    我使用的是capybara 2.18.0、rspec 3.7.0、sleniumwebdriver3.9.0和site2.13。有

    Capybara::ExpectationNotMet: Timed out waiting for Selenium session reset
    Failure/Error: raise Capybara::ExpectationNotMet.new('Timed out waiting for Selenium session reset') if (Capybara::Helpers.monotonic_time - start_time) >= 10
    
    Capybara::ExpectationNotMet:
      Timed out waiting for Selenium session reset
    C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/capybara-2.18.0/lib/capybara/selenium/driver.rb:145:in `reset!'
    C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/capybara-2.18.0/lib/capybara/session.rb:127:in `reset!'
    C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/capybara-2.18.0/lib/capybara.rb:314:in `block in reset_sessions!'
    

    我的 spec_helper.rb 看起来像这样:

    require 'rspec'
    require 'capybara/rspec'
    require 'capybara-screenshot/rspec'
    require 'capybara/dsl'
    require 'selenium-webdriver'
    require 'site_prism'
    
    Capybara.register_driver :selenium do |app|
      Capybara::Selenium::Driver.new(app, browser: :chrome)
    end
    
    Capybara.save_path = "#{Dir.pwd}/screenshots"
    
    Capybara.default_driver = :selenium
    
    Capybara.app_host = ENV['url']
    
    if ENV['timeout']
      Capybara.default_max_wait_time = ENV['timeout'].to_i
    else
      Capybara.default_max_wait_time = 15
    end
    
    RSpec.configure do |config|
      config.full_backtrace = true
    
      config.before(:each) do
        config.include Capybara::DSL
      end
    
      config.after(:each) do |example|
        if example.exception
          name = example.example_group.to_s
          name.slice!('RSpec::ExampleGroups::')
          name.gsub!('::', '#')
          whole_page.save_screenshot("#{name}##{example.description.tr(' ', '_')}-#{Time.now.strftime('%H_%M_%S')}.png")
        end
      end
    end
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Thomas Walpole    6 年前

    当Capybara重置驱动程序时,它会告诉浏览器转到 about:blank 然后等待10秒,页面上没有与css'/html/body/*'匹配的元素。在你的情况下,这不会在10秒内发生。

    其中一个原因可能是你 onunload 处理程序在您的CI硬件上执行的操作可能需要10秒以上(或打开警报消息等)??如果是这种情况,解决方法是让测试访问一个没有 空载 处理程序并在测试结束时检查该页上是否有可见的内容(可能在after块中以保持测试干净)。另一个需要验证的是,Chrome和Chrome驱动程序的版本在本地和CI之间是相同的。