Ruby Capybara::ExpectationNotMet: 等待 Selenium 会话重置超时 Failure/Error
Ruby Capybara::ExpectationNotMet: Timed out waiting for Selenium session reset Failure/Error
我在 CI 上不断收到奇怪的错误,其中我的 Selenium 会话没有重新启动。当我 运行 在本地测试时,我没有遇到这个问题。它只发生在我的 CI 服务器上。
我正在使用 Capybara 2.18.0、rspec 3.7.0、slenium-webdriver 3.9.0 和 site_prism 2.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
当 Capybara 重置驱动程序时,它告诉浏览器转到 about:blank
,然后最多等待 10 秒,直到页面上没有匹配 CSS '[=17= 的元素]/*'。在您的情况下,这不会在 10 秒内发生。
一个原因可能是您有 onunload
处理程序在您的 CI 硬件上执行可能需要超过 10 秒的操作(或打开警报消息等)?如果是这种情况,解决方法是让测试访问没有 onunload
处理程序的页面,并在测试结束时检查该页面上是否有可见内容(可能在 after 块中以保持测试干净的)。另一件要验证的事情是 Chrome 和 chromedriver 的版本在本地和 CI 之间是相同的。
我在 CI 上不断收到奇怪的错误,其中我的 Selenium 会话没有重新启动。当我 运行 在本地测试时,我没有遇到这个问题。它只发生在我的 CI 服务器上。
我正在使用 Capybara 2.18.0、rspec 3.7.0、slenium-webdriver 3.9.0 和 site_prism 2.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
当 Capybara 重置驱动程序时,它告诉浏览器转到 about:blank
,然后最多等待 10 秒,直到页面上没有匹配 CSS '[=17= 的元素]/*'。在您的情况下,这不会在 10 秒内发生。
一个原因可能是您有 onunload
处理程序在您的 CI 硬件上执行可能需要超过 10 秒的操作(或打开警报消息等)?如果是这种情况,解决方法是让测试访问没有 onunload
处理程序的页面,并在测试结束时检查该页面上是否有可见内容(可能在 after 块中以保持测试干净的)。另一件要验证的事情是 Chrome 和 chromedriver 的版本在本地和 CI 之间是相同的。