From 6840c8fc95a04fbe4f9c3891e1e646bbc31a4b80 Mon Sep 17 00:00:00 2001 From: Marius BALTEANU Date: Sun, 2 Dec 2018 20:53:18 +0000 Subject: [PATCH] Adds CAPYBARA_SERVER_HOST, CAPYBARA_SERVER_PORT, SELENIUM_REMOTE_URL and CAPYBARA_APP_HOST to allow running system tests on a remote Selenium hub (on CI using Docker images) --- doc/RUNNING_TESTS | 8 +++++++ test/application_system_test_case.rb | 34 +++++++++++++++++++--------- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/doc/RUNNING_TESTS b/doc/RUNNING_TESTS index 983b79107..5dec68c23 100644 --- a/doc/RUNNING_TESTS +++ b/doc/RUNNING_TESTS @@ -72,6 +72,14 @@ https://sites.google.com/a/chromium.org/chromedriver/ Capybara tests can be run with: `rails test:system` +The following environment variables can be used to configure your system tests setup: +`CAPYBARA_SERVER_HOST`: configure server to run on a custom IP which can be, for example, your remote Selenium IP or 0.0.0.0 to listen an all connections +`CAPYBARA_SERVER_PORT`: configure server port +`SELENIUM_REMOTE_URL`: remote Selenium URL +`CAPYBARA_APP_HOST`: by default, the tests expect to have the application running on your localhost. Using this variable, you can set a custom URL + +One use case of these variables is to run the system tests on a remote Selenium/ChromeDriver (eg: Docker). + Running RuboCop, a static code analyzer ======================================= diff --git a/test/application_system_test_case.rb b/test/application_system_test_case.rb index 7f6097cee..d5bbe7a4f 100644 --- a/test/application_system_test_case.rb +++ b/test/application_system_test_case.rb @@ -22,22 +22,34 @@ require File.expand_path('../test_helper', __FILE__) class ApplicationSystemTestCase < ActionDispatch::SystemTestCase DOWNLOADS_PATH = File.expand_path(File.join(Rails.root, 'tmp', 'downloads')) + # Allow running Capybara default server on custom IP address and/or port + Capybara.server_host = ENV['CAPYBARA_SERVER_HOST'] if ENV['CAPYBARA_SERVER_HOST'] + Capybara.server_port = ENV['CAPYBARA_SERVER_PORT'] if ENV['CAPYBARA_SERVER_PORT'] + + options = {} + # Allow running tests using a remote Selenium hub + options.merge!(url: ENV['SELENIUM_REMOTE_URL']) if ENV['SELENIUM_REMOTE_URL'] + options.merge!(desired_capabilities: Selenium::WebDriver::Remote::Capabilities.chrome( + 'chromeOptions' => { + 'prefs' => { + 'download.default_directory' => DOWNLOADS_PATH, + 'download.prompt_for_download' => false, + 'plugins.plugins_disabled' => ["Chrome PDF Viewer"] + } + } + )) + driven_by( :selenium, using: :chrome, screen_size: [1024, 900], - options: { - desired_capabilities: Selenium::WebDriver::Remote::Capabilities.chrome( - 'chromeOptions' => { - 'prefs' => { - 'download.default_directory' => DOWNLOADS_PATH, - 'download.prompt_for_download' => false, - 'plugins.plugins_disabled' => ["Chrome PDF Viewer"] - } - } - ) - } + options: options ) setup do + # Allow defining a custom app host (useful when using a remote Selenium hub) + Capybara.configure do |config| + config.app_host = ENV['CAPYBARA_APP_HOST'] + end if ENV['CAPYBARA_APP_HOST'] + clear_downloaded_files Setting.delete_all Setting.clear_cache -- 2.22.0