在尝试更新项目之前,我之前曾成功使用 Capybara 为旧 Rails 项目编写系统测试,这要归功于 this解决方案 和 Chrome 版本 114.0.5735.90-1 的说明,但新版本的 Chrome 在某些时候潜入其中点,下载链接现在失败并显示
"404. That’s an error."
(来自 https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_114.0.5735.90-1_amd64.deb
)。似乎之前的修复程序由于某种原因通常不再起作用,请注意here。所以我尝试了最新的 Chrome 版本(125.0.6422.112)并得到:
Failure/Error: Capybara.page.driver.browser.manage.window.maximize
Webdrivers::NetworkError:
Net::HTTPServerException: 404 "Not Found" with https://chromedriver.storage.googleapis.com/125.0.6422.112/chromedriver_linux64.zip
# ./spec/rails_helper.rb:66:in `block (2 levels) in <top (required)>'
项目大约是 2017 年。我可能需要一个旧的 Chrome 版本来匹配旧的 gem,但具体记不清了。
Rails 助手:
Capybara.register_driver :selenium_chrome do |app|
Capybara::Selenium::Driver.new(app, browser: :chrome, :args => ["--window-size=1920,1080"])
end
Capybara.javascript_driver = :selenium_chrome
#so can still run rails server
Capybara.server_port = 3000
Capybara.app_host = 'http://localhost:3000'
Spec.configure do |config|
config.include Devise::Test::ControllerHelpers, type: :controller
# controller spec macros
config.extend ControllerMacros, :type => :controller
# Include Factory Girl syntax to simplify calls to factories
config.include FactoryGirl::Syntax::Methods
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.use_transactional_fixtures = false
config.infer_spec_type_from_file_location!
config.include Rails.application.routes.url_helpers
# Filter lines from Rails gems in backtraces.
config.filter_rails_from_backtrace!
# arbitrary gems may also be filtered via:
# config.filter_gems_from_backtrace("gem name")
config.include Warden::Test::Helpers, type: :system
config.after(type: :system) { Warden.test_reset! }
config.include Capybara::DSL
config.filter_run_when_matching focus: true
config.before(:each, js: true) do
Capybara.page.driver.browser.manage.window.maximize
end
#databasecleaner code in spec/support/database_cleaning.rb
end
应用程序.rb/环境.rb
Webdrivers::Chromedriver.required_version = "125.0.6422.112"
group :test do
gem 'capybara', '~> 3.6.0'
gem 'factory_girl_rails', '~> 4.7'
gem 'selenium-webdriver', '~> 3.6.0'
gem "database_cleaner", "~> 1.5"
gem 'capybara-email'
etc
根据谷歌,
ChromeDriver 的每个版本都支持 Chrome,并具有匹配的主要版本号、次要版本号和内部版本号。例如,ChromeDriver 73.0.3683.20 支持以 73.0.3683` 开头的所有 Chrome 版本。
因此,您必须为您使用的 Chrome 版本选择正确的 Chromedriver 版本。
这一直是管理上的问题,这就是谷歌推出“Chrome for Test”产品的原因,该产品会自动将其版本与Chrome同步。 (请参阅上面的链接了解更多信息)
我很好奇为什么你会因为 Gem 兼容性而停留在版本 114 上。大多数 Gems 影响服务器端,我从未遇到过由于 Gems 导致浏览器不兼容的情况。