Skip to content

Commit df54e78

Browse files
committed
[rb] move driver related functionality to Service classes
1 parent 5226a5a commit df54e78

File tree

25 files changed

+733
-196
lines changed

25 files changed

+733
-196
lines changed

rb/lib/selenium/webdriver/chrome/bridge.rb

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,25 @@ def initialize(opts = {})
2626
opts[:desired_capabilities] = create_capabilities(opts)
2727

2828
unless opts.key?(:url)
29+
driver_path = opts.delete(:driver_path) || Chrome.driver_path
2930
port = opts.delete(:port) || Service::DEFAULT_PORT
30-
service_args = opts.delete(:service_args) || {}
3131

32-
if opts[:service_log_path]
33-
service_args.merge!(service_log_path: opts.delete(:service_log_path))
32+
opts[:driver_opts] ||= {}
33+
if opts.key? :service_log_path
34+
WebDriver.logger.warn <<-DEPRECATE.gsub(/\n +| {2,}/, ' ').freeze
35+
[DEPRECATION] `:service_log_path` is deprecated. Use `driver_opts: {log_path: #{opts[:service_log_path]}}`
36+
DEPRECATE
37+
opts[:driver_opts][:log_path] = opts.delete :service_log_path
3438
end
3539

36-
driver_path = opts.delete(:driver_path) || Chrome.driver_path
37-
@service = Service.new(driver_path, port, *extract_service_args(service_args))
40+
if opts.key? :service_args
41+
WebDriver.logger.warn <<-DEPRECATE.gsub(/\n +| {2,}/, ' ').freeze
42+
[DEPRECATION] `:service_args` is deprecated. Pass switches using `driver_opts`
43+
DEPRECATE
44+
opts[:driver_opts][:args] = opts.delete(:service_args)
45+
end
46+
47+
@service = Service.new(driver_path, port, opts.delete(:driver_opts))
3848
@service.start
3949
opts[:url] = @service.uri
4050
end
@@ -47,10 +57,8 @@ def browser
4757
end
4858

4959
def driver_extensions
50-
[
51-
DriverExtensions::TakesScreenshot,
52-
DriverExtensions::HasWebStorage
53-
]
60+
[DriverExtensions::TakesScreenshot,
61+
DriverExtensions::HasWebStorage]
5462
end
5563

5664
def capabilities
@@ -76,34 +84,24 @@ def create_capabilities(opts)
7684
raise ArgumentError, ':args must be an Array of Strings'
7785
end
7886

79-
chrome_options['args'] = args.map(&:to_s)
87+
args.map!(&:to_s)
8088
profile = opts.delete(:profile).as_json if opts.key?(:profile)
8189

82-
if profile && chrome_options['args'].none? { |arg| arg =~ /user-data-dir/}
83-
chrome_options['args'] << "--user-data-dir=#{profile[:directory]}"
90+
if profile && args.none? { |arg| arg =~ /user-data-dir/ }
91+
args << "--user-data-dir=#{profile[:directory]}"
8492
end
93+
chrome_options['args'] = args unless args.empty?
8594

8695
chrome_options['extensions'] = profile[:extensions] if profile && profile[:extensions]
8796
chrome_options['detach'] = true if opts.delete(:detach)
8897
chrome_options['prefs'] = opts.delete(:prefs) if opts.key?(:prefs)
8998

90-
caps[:chrome_options] = chrome_options
99+
caps[:chrome_options] = chrome_options unless chrome_options.empty?
91100
caps[:proxy] = opts.delete(:proxy) if opts.key?(:proxy)
92101
caps[:proxy] ||= opts.delete('proxy') if opts.key?('proxy')
93102

94103
caps
95104
end
96-
97-
def extract_service_args(args)
98-
service_args = []
99-
service_args << "--log-path=#{args.delete(:service_log_path)}" if args.key?(:service_log_path)
100-
service_args << "--url-base=#{args.delete(:url_base)}" if args.key?(:url_base)
101-
service_args << "--port-server=#{args.delete(:port_server)}" if args.key?(:port_server)
102-
service_args << "--whitelisted-ips=#{args.delete(:whitelisted_ips)}" if args.key?(:whitelisted_ips)
103-
service_args << "--verbose=#{args.delete(:verbose)}" if args.key?(:verbose)
104-
service_args << "--silent=#{args.delete(:silent)}" if args.key?(:silent)
105-
service_args
106-
end
107105
end # Bridge
108106
end # Chrome
109107
end # WebDriver

rb/lib/selenium/webdriver/chrome/service.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,17 @@ def start_process
4848
def cannot_connect_error_text
4949
"unable to connect to chromedriver #{@host}:#{@port}"
5050
end
51+
52+
def extract_service_args(driver_opts)
53+
driver_args = super
54+
driver_args << "--log-path=#{driver_opts.delete(:log_path)}" if driver_opts.key?(:log_path)
55+
driver_args << "--url-base=#{driver_opts.delete(:url_base)}" if driver_opts.key?(:url_base)
56+
driver_args << "--port-server=#{driver_opts.delete(:port_server)}" if driver_opts.key?(:port_server)
57+
driver_args << "--whitelisted-ips=#{driver_opts.delete(:whitelisted_ips)}" if driver_opts.key?(:whitelisted_ips)
58+
driver_args << "--verbose" if driver_opts.key?(:verbose)
59+
driver_args << "--silent" if driver_opts.key?(:silent)
60+
driver_args
61+
end
5162
end # Service
5263
end # Chrome
5364
end # WebDriver

rb/lib/selenium/webdriver/common/service.rb

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,11 +45,11 @@ class << self
4545

4646
attr_accessor :host
4747

48-
def initialize(executable_path, port, *extra_args)
48+
def initialize(executable_path, port, driver_opts)
4949
@executable_path = binary_path(executable_path)
5050
@host = Platform.localhost
5151
@port = Integer(port)
52-
@extra_args = extra_args
52+
@extra_args = extract_service_args(driver_opts)
5353

5454
raise Error::WebDriverError, "invalid port: #{@port}" if @port < 1
5555
end
@@ -137,6 +137,13 @@ def cannot_connect_error_text
137137
def socket_lock
138138
@socket_lock ||= SocketLock.new(@port - 1, SOCKET_LOCK_TIMEOUT)
139139
end
140+
141+
protected
142+
143+
def extract_service_args(driver_opts)
144+
driver_opts.key?(:args) ? driver_opts.delete(:args) : []
145+
end
146+
140147
end # Service
141148
end # WebDriver
142149
end # Selenium

rb/lib/selenium/webdriver/edge/bridge.rb

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,26 @@ module Edge
2626

2727
class Bridge < Remote::W3CBridge
2828
def initialize(opts = {})
29-
port = opts.delete(:port) || Service::DEFAULT_PORT
30-
service_args = opts.delete(:service_args) || {}
29+
opts[:desired_capabilities] ||= Remote::W3CCapabilities.edge
3130

3231
unless opts.key?(:url)
3332
driver_path = opts.delete(:driver_path) || Edge.driver_path
34-
@service = Service.new(driver_path, port, *extract_service_args(service_args))
33+
port = opts.delete(:port) || Service::DEFAULT_PORT
34+
35+
opts[:driver_opts] ||= {}
36+
if opts.key? :service_args
37+
WebDriver.logger.warn <<-DEPRECATE.gsub(/\n +| {2,}/, ' ').freeze
38+
[DEPRECATION] `:service_args` is deprecated. Pass switches using `driver_opts`
39+
DEPRECATE
40+
opts[:driver_opts][:args] = opts.delete(:service_args)
41+
end
42+
43+
@service = Service.new(driver_path, port, opts.delete(:driver_opts))
3544
@service.host = 'localhost' if @service.host == '127.0.0.1'
3645
@service.start
3746
opts[:url] = @service.uri
3847
end
3948

40-
opts[:desired_capabilities] ||= Remote::W3CCapabilities.edge
41-
4249
super(opts)
4350
end
4451

@@ -108,16 +115,6 @@ def reposition_window(x, y, handle = :current)
108115
def maximize_window(handle = :current)
109116
execute :maximize_window, window_handle: handle
110117
end
111-
112-
private
113-
114-
def extract_service_args(args = {})
115-
service_args = []
116-
service_args << "–host=#{args[:host]}" if args.key? :host
117-
service_args << "–package=#{args[:package]}" if args.key? :package
118-
service_args << "-verbose" if args[:verbose] == true
119-
service_args
120-
end
121118
end # Bridge
122119
end # Edge
123120
end # WebDriver

rb/lib/selenium/webdriver/edge/service.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,14 @@ def start_process
4747
def cannot_connect_error_text
4848
"unable to connect to MicrosoftWebDriver #{@host}:#{@port}"
4949
end
50+
51+
def extract_service_args(driver_opts)
52+
driver_args = super
53+
driver_args << "–host=#{driver_opts[:host]}" if driver_opts.key? :host
54+
driver_args << "–package=#{driver_opts[:package]}" if driver_opts.key? :package
55+
driver_args << "-verbose" if driver_opts[:verbose] == true
56+
driver_args
57+
end
5058
end # Service
5159
end # Edge
5260
end # WebDriver

rb/lib/selenium/webdriver/firefox/bridge.rb

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,20 @@ module Firefox
2424
class Bridge < Remote::Bridge
2525
def initialize(opts = {})
2626
opts[:desired_capabilities] ||= Remote::Capabilities.firefox
27-
opts[:desired_capabilities].proxy = opts.delete(:proxy) if opts.key?(:proxy)
27+
28+
if opts.key? :proxy
29+
WebDriver.logger.warn <<-DEPRECATE.gsub(/\n +| {2,}/, ' ').freeze
30+
[DEPRECATION] `:proxy` is deprecated. Pass in as capability: `Remote::Capabilities.firefox(proxy: #{opts[:proxy]})`
31+
DEPRECATE
32+
opts[:desired_capabilities].proxy = opts.delete(:proxy)
33+
end
2834

2935
unless opts.key?(:url)
3036
port = opts.delete(:port) || DEFAULT_PORT
3137
profile = opts.delete(:profile)
3238

3339
Binary.path = opts[:desired_capabilities][:firefox_binary] if opts[:desired_capabilities][:firefox_binary]
34-
@launcher = create_launcher(port, profile)
40+
@launcher = Launcher.new Binary.new, port, profile
3541
@launcher.launch
3642
opts[:url] = @launcher.url
3743
end
@@ -58,12 +64,6 @@ def quit
5864
ensure
5965
@launcher.quit
6066
end
61-
62-
private
63-
64-
def create_launcher(port, profile)
65-
Launcher.new Binary.new, port, profile
66-
end
6767
end # Bridge
6868
end # Firefox
6969
end # WebDriver

rb/lib/selenium/webdriver/firefox/service.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,15 @@ def start_process
5151
def cannot_connect_error_text
5252
"unable to connect to Mozilla geckodriver #{@host}:#{@port}"
5353
end
54+
55+
def extract_service_args(driver_opts)
56+
driver_args = super
57+
driver_args << "--binary=#{driver_opts[:binary]}" if driver_opts.key?(:binary)
58+
driver_args << "–-log=#{driver_opts[:log]}" if driver_opts.key?(:log)
59+
driver_args << "–-marionette-port=#{driver_opts[:marionette_port]}" if driver_opts.key?(:marionette_port)
60+
driver_args << "–-host=#{driver_opts[:host]}" if driver_opts.key?(:host)
61+
driver_args
62+
end
5463
end # Service
5564
end # Firefox
5665
end # WebDriver

rb/lib/selenium/webdriver/firefox/w3c_bridge.rb

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,18 @@ def initialize(opts = {})
2626
opts[:desired_capabilities] = create_capabilities(opts)
2727

2828
unless opts.key?(:url)
29+
driver_path = opts.delete(:driver_path) || Firefox.driver_path
2930
port = opts.delete(:port) || Service::DEFAULT_PORT
30-
service_args = opts.delete(:service_args) || {}
3131

32-
driver_path = opts.delete(:driver_path) || Firefox.driver_path
33-
@service = Service.new(driver_path, port, *extract_service_args(service_args))
32+
opts[:driver_opts] ||= {}
33+
if opts.key? :service_args
34+
WebDriver.logger.warn <<-DEPRECATE.gsub(/\n +| {2,}/, ' ').freeze
35+
[DEPRECATION] `:service_args` is deprecated. Pass switches using `driver_opts`
36+
DEPRECATE
37+
opts[:driver_opts][:args] = opts.delete(:service_args)
38+
end
39+
40+
@service = Service.new(driver_path, port, opts.delete(:driver_opts))
3441
@service.start
3542
opts[:url] = @service.uri
3643
end
@@ -44,7 +51,7 @@ def browser
4451

4552
def driver_extensions
4653
[DriverExtensions::TakesScreenshot,
47-
DriverExtensions::HasWebStorage]
54+
DriverExtensions::HasWebStorage]
4855
end
4956

5057
def quit
@@ -71,17 +78,6 @@ def create_capabilities(opts)
7178
Binary.path = caps[:firefox_options][:binary] if caps[:firefox_options].key?(:binary)
7279
caps
7380
end
74-
75-
def extract_service_args(args = {})
76-
service_args = []
77-
service_args << "--binary=#{args[:binary]}" if args.key?(:binary)
78-
service_args << "–-log=#{args[:log]}" if args.key?(:log)
79-
service_args << "–-marionette-port=#{args[:marionette_port]}" if args.key?(:marionette_port)
80-
service_args << "–-host=#{args[:host]}" if args.key?(:host)
81-
service_args << "–-port=#{args[:port]}" if args.key?(:port)
82-
service_args
83-
end
84-
8581
end # W3CBridge
8682
end # Firefox
8783
end # WebDriver

rb/lib/selenium/webdriver/ie/bridge.rb

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,26 @@ def initialize(opts = {})
2929
opts[:desired_capabilities] ||= Remote::Capabilities.internet_explorer
3030

3131
unless opts.key?(:url)
32-
port = opts.delete(:port) || Service::DEFAULT_PORT
33-
service_args = opts.delete(:service_args) || {}
34-
service_args = match_legacy(opts, service_args)
3532
driver_path = opts.delete(:driver_path) || IE.driver_path
36-
@service = Service.new(driver_path, port, *extract_service_args(service_args))
33+
port = opts.delete(:port) || Service::DEFAULT_PORT
34+
35+
opts[:driver_opts] ||= {}
36+
if opts.key? :service_args
37+
WebDriver.logger.warn <<-DEPRECATE.gsub(/\n +| {2,}/, ' ').freeze
38+
[DEPRECATION] `:service_args` is deprecated. Pass switches using `driver_opts`
39+
DEPRECATE
40+
opts[:driver_opts][:args] = opts.delete(:service_args)
41+
end
42+
43+
%i[log_level log_file implementation].each do |method|
44+
next unless opts.key? method
45+
WebDriver.logger.warn <<-DEPRECATE.gsub(/\n +| {2,}/, ' ').freeze
46+
[DEPRECATION] `#{method}` is deprecated. Pass switches using `driver_opts`
47+
DEPRECATE
48+
opts[:driver_opts][method] = opts.delete(method)
49+
end
50+
51+
@service = Service.new(driver_path, port, opts.delete(:driver_opts))
3752
@service.start
3853
opts[:url] = @service.uri
3954
end
@@ -59,26 +74,6 @@ def quit
5974
ensure
6075
@service.stop if @service
6176
end
62-
63-
private
64-
65-
def match_legacy(opts, args)
66-
args[:log_level] = opts.delete(:log_level) if opts.key?(:log_level)
67-
args[:log_file] = opts.delete(:log_file) if opts.key?(:log_file)
68-
args[:implementation] = opts.delete(:implementation) if opts.key?(:implementation)
69-
args
70-
end
71-
72-
def extract_service_args(args)
73-
service_args = []
74-
service_args << "--log-level=#{args.delete(:log_level).to_s.upcase}" if args.key?(:log_level)
75-
service_args << "--log-file=#{args.delete(:log_file)}" if args.key?(:log_file)
76-
service_args << "--implementation=#{args.delete(:implementation).to_s.upcase}" if args.key?(:implementation)
77-
service_args << "--host=#{args.delete(:host)}" if args.key?(:host)
78-
service_args << "--extract_path=#{args.delete(:extract_path)}" if args.key?(:extract_path)
79-
service_args << "--silent" if args[:silent] == true
80-
service_args
81-
end
8277
end # Bridge
8378
end # IE
8479
end # WebDriver

rb/lib/selenium/webdriver/ie/service.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,17 @@ def start_process
4747
def cannot_connect_error_text
4848
"unable to connect to IE server #{@host}:#{@port}"
4949
end
50+
51+
def extract_service_args(driver_opts)
52+
driver_args = super
53+
driver_args << "--log-level=#{driver_opts.delete(:log_level).to_s.upcase}" if driver_opts.key?(:log_level)
54+
driver_args << "--log-file=#{driver_opts.delete(:log_file)}" if driver_opts.key?(:log_file)
55+
driver_args << "--implementation=#{driver_opts.delete(:implementation).to_s.upcase}" if driver_opts.key?(:implementation)
56+
driver_args << "--host=#{driver_opts.delete(:host)}" if driver_opts.key?(:host)
57+
driver_args << "--extract_path=#{driver_opts.delete(:extract_path)}" if driver_opts.key?(:extract_path)
58+
driver_args << "--silent" if driver_opts[:silent] == true
59+
driver_args
60+
end
5061
end # Server
5162
end # IE
5263
end # WebDriver

0 commit comments

Comments
 (0)