# frozen_string_literal: true # This plugin does not attempt to require capybara. It assumes that if you're # using capybara, you're probably using something like Bundler which has already # required it for you. # # If this is not the case, you will need to require it prior to requiring # rspeckled. # # The same goes for capybara-webkit. It must be required before rspeckled. require 'capybara/rspec' require 'capybara/rails' downloads_directory = "#{Dir.pwd}/tmp/downloads/" Dir.mkdir(downloads_directory) unless Dir.exist?(downloads_directory) chrome_options = { 'chromeOptions' => { 'prefs' => { 'profile.default_content_settings.popups' => 0, 'download.default_directory' => downloads_directory, }, 'args' => %w{ window-size=1920,1200 }, }, } Capybara.register_driver :chrome do |app| Capybara::Selenium::Driver.new( app, :browser => :chrome, :desired_capabilities => Selenium::WebDriver::Remote::Capabilities.chrome(chrome_options) ) end headless_chrome_options = chrome_options.dup headless_chrome_options['chromeOptions']['binary'] = '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' headless_chrome_options['chromeOptions']['args'] << 'headless' headless_chrome_options['chromeOptions']['args'] << 'disable-gpu' Capybara.register_driver :headless_chrome do |app| Capybara::Selenium::Driver.new( app, :browser => :chrome, :desired_capabilities => Selenium::WebDriver::Remote::Capabilities.chrome(headless_chrome_options) ) end firefox_profile = Selenium::WebDriver::Firefox::Profile.new firefox_profile['browser.download.dir'] = downloads_directory firefox_profile['browser.download.folderList'] = 2 firefox_profile['browser.helperApps.neverAsk.saveToDisk'] = 'images/jpeg, application/pdf, application/octet-stream' firefox_profile['pdfjs.disabled'] = true Capybara.register_driver :firefox do |app| Capybara::Selenium::Driver.new(app, :browser => :firefox, :profile => firefox_profile) end Selenium::WebDriver.logger.output = 'log/selenium.log' if defined?(Selenium::WebDriver) if defined?(Capybara::Webkit) Capybara.javascript_driver = :webkit Capybara::Webkit.configure do |config| config.block_unknown_urls config.skip_image_loading config.allow_url('*.lvh.me') config.allow_url('*.cloudfront.net') config.allow_url('*.s3.amazonaws.com') if defined?(Chamber) config.allow_url("*.#{Chamber.env.http.host}") config.allow_url("*.#{Chamber.env.http.web_client_domain}") end end else Capybara.javascript_driver = :selenium end Capybara.configure do |config| config.exact = true config.match = :one config.ignore_hidden_elements = true config.visible_text_only = true end if defined?(Chamber) Capybara.default_host = Chamber.env.http.base_url Capybara.app_host = Chamber.env.http.base_url Capybara.server_port = Chamber.env.http.port end RSpec.configure do |config| config.before(:each, :js => true) do page.driver.reset! end config.before(:each, :js => true, :autofocus => true) do Thread.new do sleep 1.5 ` osascript -e ' tell the application named "Firefox" activate set theWindow to the first item of windows if index of theWindow is not 1 then set index to 1 set visible to false set visible to true end if end tell ' > /dev/null ` end end config.after(:each, :js => true, :autofocus => true) do sleep 10 end config.before(:each, :js => true, :feature => true, :debug => true) do Selenium::WebDriver.logger.level = :debug if defined?(Selenium::WebDriver) end config.after(:each, :js => true, :feature => true, :debug => true) do Selenium::WebDriver.logger.level = :warn if defined?(Selenium::WebDriver) end end