From a4294073236c50bfd737edcd51e74dfd809d93cb Mon Sep 17 00:00:00 2001 From: Klaus Zanders Date: Tue, 25 Jul 2023 16:59:22 +0200 Subject: [PATCH] Revert "Merge pull request #13190 from opf/remove-webdrivers" This reverts commit 0f0088375edde9193e0a151436c4af02940f8615, reversing changes made to 0b8441e154ed34f4fa2d5c6c770428654fdaf202. --- Gemfile | 5 +++-- Gemfile.lock | 5 +++++ config/environments/test.rb | 4 ++++ docker/ci/entrypoint.sh | 2 +- .../action_boards/status_type_moving_board_spec.rb | 6 ++---- script/ci/cache_prepare.sh | 2 +- spec/support/browsers/chrome.rb | 9 +++++++++ spec/support/browsers/firefox.rb | 3 ++- 8 files changed, 27 insertions(+), 9 deletions(-) diff --git a/Gemfile b/Gemfile index f8560d13997..af2bc6e536b 100644 --- a/Gemfile +++ b/Gemfile @@ -30,11 +30,11 @@ source 'https://rubygems.org' ruby '~> 3.2.1' +gem 'ox' gem 'actionpack-xml_parser', '~> 2.0.0' gem 'activemodel-serializers-xml', '~> 1.0.1' gem 'activerecord-import', '~> 1.4.0' gem 'activerecord-session_store', '~> 2.0.0' -gem 'ox' gem 'rails', '~> 7.0', '>= 7.0.3.1' gem 'responders', '~> 3.0' @@ -155,8 +155,8 @@ gem 'structured_warnings', '~> 0.4.0' # don't require by default, instead load on-demand when actually configured gem 'airbrake', '~> 13.0.0', require: false -gem 'md_to_pdf', git: 'https://github.com/opf/md-to-pdf', ref: '76945d45c14b841e2312f992422e2631a4524114' gem 'prawn', '~> 2.2' +gem 'md_to_pdf', git: 'https://github.com/opf/md-to-pdf', ref: '76945d45c14b841e2312f992422e2631a4524114' # prawn implicitly depends on matrix gem no longer in ruby core with 3.1 gem 'matrix', '~> 0.4.2' @@ -244,6 +244,7 @@ group :test do gem 'capybara-screenshot', '~> 1.0.17' gem 'cuprite', '~> 0.14.3' gem 'selenium-webdriver', '~> 4.0' + gem 'webdrivers', '~> 5.2.0' gem 'fuubar', '~> 2.5.0' gem 'timecop', '~> 0.9.0' diff --git a/Gemfile.lock b/Gemfile.lock index aa98faa71f6..a1359c7036e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -947,6 +947,10 @@ GEM rack (>= 2.0.9) warden-basic_auth (0.2.1) warden (~> 1.2) + webdrivers (5.2.0) + nokogiri (~> 1.6) + rubyzip (>= 1.3.0) + selenium-webdriver (~> 4.0) webfinger (2.1.2) activesupport faraday (~> 2.0) @@ -1146,6 +1150,7 @@ DEPENDENCIES view_component warden (~> 1.2) warden-basic_auth (~> 0.2.1) + webdrivers (~> 5.2.0) webmock (~> 3.12) will_paginate (~> 4.0.0) with_advisory_lock (~> 4.6.0) diff --git a/config/environments/test.rb b/config/environments/test.rb index 3bc85e83dc3..1c1a2072f19 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -96,4 +96,8 @@ OpenProject::Application.configure do # Speed up tests by lowering BCrypt's cost function BCrypt::Engine.cost = BCrypt::Engine::MIN_COST + + # Pin Chromedriver version to last version that was released the "old way" + # See https://github.com/titusfortner/webdrivers/issues/247 + Webdrivers::Chromedriver.required_version = "114.0.5735.90" end diff --git a/docker/ci/entrypoint.sh b/docker/ci/entrypoint.sh index 922e426f12f..dd9c75d2d5c 100755 --- a/docker/ci/entrypoint.sh +++ b/docker/ci/entrypoint.sh @@ -68,7 +68,7 @@ setup_tests() { fi # create test database "app" and dump schema because db/structure.sql is not checked in - execute_quiet "time bundle exec rails db:migrate db:schema:dump zeitwerk:check" + execute_quiet "time bundle exec rails db:migrate db:schema:dump zeitwerk:check webdrivers:chromedriver:update[114.0.5735.90] webdrivers:geckodriver:update" } run_units() { diff --git a/modules/boards/spec/features/action_boards/status_type_moving_board_spec.rb b/modules/boards/spec/features/action_boards/status_type_moving_board_spec.rb index 328f59ad8d0..239d9552f4e 100644 --- a/modules/boards/spec/features/action_boards/status_type_moving_board_spec.rb +++ b/modules/boards/spec/features/action_boards/status_type_moving_board_spec.rb @@ -126,13 +126,11 @@ RSpec.describe 'Status action board', js: true, with_ee: %i[board_view] do filters.expect_filter_by('Type', 'is (OR)', [type_task.name, type_bug.name]) # Wait a bit before saving the page to ensure both values are processed - sleep 1 + sleep 2 board_page.expect_changed board_page.save - sleep 1 - # Move task to closed board_page.move_card(0, from: 'Open', to: 'Closed') board_page.expect_card('Open', 'Open task item', present: false) @@ -143,7 +141,7 @@ RSpec.describe 'Status action board', js: true, with_ee: %i[board_view] do board_page.card_for(bug_wp).expect_type 'Bug' # Wait a bit before moving the items too fast - sleep 1 + sleep 2 # Move bug to open board_page.move_card(0, from: 'Closed', to: 'Open') diff --git a/script/ci/cache_prepare.sh b/script/ci/cache_prepare.sh index 45424b63c68..a76ddc612b2 100644 --- a/script/ci/cache_prepare.sh +++ b/script/ci/cache_prepare.sh @@ -37,7 +37,7 @@ run() { eval $2; } -run "bundle exec rake db:create db:migrate" +run "bundle exec rake db:create db:migrate webdrivers:chromedriver:update[114.0.5735.90] webdrivers:geckodriver:update" run "cd frontend; npm install ; cd -" diff --git a/spec/support/browsers/chrome.rb b/spec/support/browsers/chrome.rb index a056f8dd003..21edf1b21a2 100644 --- a/spec/support/browsers/chrome.rb +++ b/spec/support/browsers/chrome.rb @@ -1,3 +1,6 @@ +# Force the latest version of chromedriver using the webdriver gem +require 'webdrivers/chromedriver' + # rubocop:disable Metrics/PerceivedComplexity def register_chrome(language, name: :"chrome_#{language}", override_time_zone: nil) Capybara.register_driver name do |app| @@ -50,7 +53,13 @@ def register_chrome(language, name: :"chrome_#{language}", override_time_zone: n if is_grid driver_opts[:url] = ENV.fetch('SELENIUM_GRID_URL', nil) else + if Webdrivers::ChromeFinder.location == '/snap/bin/chromium' + # make chromium snap install work out-of-the-box + # See https://stackoverflow.com/a/65121582/177665 + chromedriver_path = '/snap/bin/chromium.chromedriver' + end driver_opts[:service] = Selenium::WebDriver::Service.chrome( + path: chromedriver_path, args: ['--verbose', '--log-path=/tmp/chromedriver.log'] ) end diff --git a/spec/support/browsers/firefox.rb b/spec/support/browsers/firefox.rb index 4dd722c4bf7..c5ca5ff0367 100644 --- a/spec/support/browsers/firefox.rb +++ b/spec/support/browsers/firefox.rb @@ -1,4 +1,5 @@ # Force the latest version of geckodriver using the webdriver gem +require 'webdrivers/geckodriver' require 'socket' def register_firefox(language, name: :"firefox_#{language}") @@ -41,7 +42,7 @@ def register_firefox(language, name: :"firefox_#{language}") browser: is_grid ? :remote : :firefox, url: ENV.fetch('SELENIUM_GRID_URL', nil), http_client: client, - options: + capabilities: options } if is_grid