我不断在我的Selenium会话未重启的CI上出现错误错误。我在本地运行测试时没遇到这个问题。它只发生在我的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
答案 0 :(得分:2)
当Capybara重置驱动程序时,它会告诉浏览器转到about:blank
,然后等待最多10秒,因为页面上没有与CSS' / html / body / *&匹配的元素#39 ;.在你的情况下,不会在10秒内发生。
这样做的一个原因可能是你的onunload
处理程序在CI硬件上执行的操作时间超过10秒(或打开警报消息等)?如果是这种情况,则解决方法是让测试访问一个没有onunload
处理程序的页面,并在测试结束时检查该页面上可见的内容(可能是阻止后保持测试清洁)。要验证的另一件事是Chrome和chromedriver的版本在本地和CI之间是相同的。