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