lib/true_automation/driver/capybara.rb in true_automation-0.3.31 vs lib/true_automation/driver/capybara.rb in true_automation-0.4.0

- old
+ new

@@ -23,14 +23,19 @@ class RecordNotFound < StandardError; end module Driver class Capybara < Capybara::Selenium::Driver def initialize(app, **options) - @port = options.delete(:port) || 9515 + options = fetch_options(options) + @port = options.delete(:port) || find_available_port('localhost') @driver = options.delete(:driver) @driver_version = options.delete(:driver_version) + if options[:ta_service] + @ta_service = options.delete(:ta_service) + end + super(app, options) @ta_client = TrueAutomation::Client.new @remote = '' @@ -55,18 +60,18 @@ def browser unless @browser @ta_client.start(port: @port, remote: @remote, driver: @driver, + ta_service_path: @ta_service&.executable_path, driver_version: @driver_version) @ta_client.wait_until_start at_exit do @ta_client.stop end - super end @browser end @@ -84,9 +89,29 @@ extend specialization end else super end + end + + private + def fetch_options(options) + if options.key?(:options) + browser = options[:options].class.name.split('::')[2] + desCaps = Selenium::WebDriver::Remote::Capabilities.send(browser.downcase) + opts = options[:options].as_json + desCaps[opts.keys.first] = opts[opts.keys.first] + options[:desired_capabilities] = desCaps + options.delete(:options) + end + options + end + + def find_available_port(host) + server = TCPServer.new(host, rand(9515..65515)) + server.addr[1] + ensure + server&.close end end end end