lib/true_automation/driver/capybara.rb in true_automation-0.5.9 vs lib/true_automation/driver/capybara.rb in true_automation-0.6.0
- old
+ new
@@ -66,10 +66,14 @@
module Driver
class Capybara < Capybara::Selenium::Driver
def initialize(app, **options)
options = fetch_options(options)
+ if options[:browser].to_s != 'remote'
+ default_options = Selenium::WebDriver::Options.send(options[:browser] || :chrome)
+ end
+ options[:capabilities] ||= default_options
@port = options.delete(:port) || find_available_port('localhost')
@driver = options.delete(:driver)
@driver_version = options.delete(:driver_version)
if options && options[:ta_debug]
@@ -89,21 +93,15 @@
options ||= {}
ta_url = options[:ta_url] || "http://localhost:#{@port}/"
capabilities = options[:capabilities] || {}
- if options and options[:browser] == :remote
+ if options && options[:browser] == :remote
raise 'Remote driver URL is not specified' unless options[:url]
- input_caps = options[:capabilities]&.as_json || {}
- input_caps = options[:capabilities]&.as_json || {}
- browser = opts_browser(options[:capabilities] || Selenium::WebDriver::Chrome::Capabilities.new)
- browser_class_name = browser.to_s.slice(0,1).capitalize + browser.to_s.slice(1..-1)
- capabilities = browser.to_s == 'remote' ?
- Selenium::WebDriver::Remote::Options.new :
- self.class.class_eval("Selenium::WebDriver::#{browser_class_name}::Options").send(browser)
- copy_options(capabilities, input_caps)
-
+ input_caps = opts_to_json(options[:capabilities]) || {}
+ browser = opts_browser(options[:capabilities] || Selenium::WebDriver::Options.chrome)
+ capabilities = options_class(browser).new(**input_caps)
capabilities.add_preference(:taRemoteUrl, options[:url])
@remote = ' --remote'
end
@options.merge!(browser: :remote,
@@ -116,11 +114,12 @@
@ta_client.start(port: @port,
remote: @remote,
ta_debug: @ta_debug,
driver: @driver,
ta_service_path: @ta_service&.executable_path,
- driver_version: @driver_version)
+ driver_version: @driver_version,
+ ta_recorder: @ta_recorder)
@ta_client.wait_until_start
at_exit do
@ta_client.stop
@@ -148,29 +147,47 @@
end
end
private
+ def options_class(browser)
+ browser.to_s == 'remote' ?
+ Selenium::WebDriver::Remote::Options :
+ eval("Selenium::WebDriver::#{browser_class_name(browser)}::Options")
+ end
+
+ def browser_class_name(browser)
+ browser.to_s.slice(0,1).capitalize + browser.to_s.slice(1..-1)
+ end
+
def opts_browser(opts)
opts.class.name.split('::')[2].downcase.to_sym
end
+ def opts_to_json(opts)
+ opts.is_a?(Selenium::WebDriver::Options) ?
+ opts&.options :
+ opts&.as_json
+ end
+
def fetch_options(options)
+ if options.delete(:ta_recorder)
+ @ta_recorder = ' --ta-recorder'
+ end
if options.key?(:options)
browser = opts_browser(options[:options])
- desCaps = Selenium::WebDriver::Remote::Capabilities.send(browser.downcase)
- opts = options[:options].as_json
- copy_options(desCaps, opts)
+ opts = opts_to_json(options[:options])
+ desCaps = options_class(browser).new(**opts)
options[:capabilities] = desCaps
options.delete(:options)
end
options
end
def copy_options(caps, opts)
# Add options to capabilities mapping if required
opts.keys.each do |key|
- caps.add_preference(key, opts[key])
+ caps.add_option(key, opts[key])
end
end
def find_available_port(host)
server = TCPServer.new(host, rand(9515..65515))