femslash-city/tests/acceptance/environment.rb

55 lines
1.8 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
require_relative '../environment'
require 'capybara'
require 'capybara/minitest'
require 'capybara/minitest/spec'
require 'rack_session_access/capybara'
Capybara.app = Sinatra::Application
Capybara.default_max_wait_time = 10
Capybara.register_driver :selenium_chrome_headless_largewindow do |app|
options = ::Selenium::WebDriver::Chrome::Options.new
options.add_argument('--headless')
options.add_argument('--window-size=1280,800') # Set your desired window size
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--disable-features=VizDisplayCompositor') # Prevents DOM inspector issues
options.add_argument('--host-resolver-rules=MAP * 127.0.0.1') # Block external requests
options.add_argument('--disable-background-networking') # Prevent background network activity
client = Selenium::WebDriver::Remote::Http::Default.new
client.read_timeout = 120
client.open_timeout = 120
Capybara::Selenium::Driver.new(app, browser: :chrome, options: options, http_client: client)
end
# Work around Chrome intermittently reporting stale DOM nodes as UnknownError.
module Neocities
module CapybaraStaleNodePatch
STALE_NODE_MESSAGE = 'Node with given id does not belong to the document'
def visible?(*args, &block)
with_stale_node_retry { super(*args, &block) }
end
def visible_text(*args, &block)
with_stale_node_retry { super(*args, &block) }
end
private
def with_stale_node_retry
yield
rescue Selenium::WebDriver::Error::UnknownError => e
raise unless e.message&.include?(STALE_NODE_MESSAGE)
raise Selenium::WebDriver::Error::StaleElementReferenceError, e.message
end
end
end
Capybara::Selenium::Node.prepend(Neocities::CapybaraStaleNodePatch)