selenium-webdriver 3.2.2 → 3.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES CHANGED
@@ -1,3 +1,10 @@
1
+ 3.3.0 (2017-03-07)
2
+ ===================
3
+
4
+ W3C:
5
+ * Support for command response data to be wrapped in a 'value' key
6
+ * Support for updated timeout formats
7
+
1
8
  3.2.2 (2017-03-01)
2
9
  ===================
3
10
 
@@ -26,15 +26,25 @@ module Selenium
26
26
  opts[:desired_capabilities] = create_capabilities(opts)
27
27
 
28
28
  unless opts.key?(:url)
29
+ driver_path = opts.delete(:driver_path) || Chrome.driver_path
29
30
  port = opts.delete(:port) || Service::DEFAULT_PORT
30
- service_args = opts.delete(:service_args) || {}
31
31
 
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
34
38
  end
35
39
 
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))
38
48
  @service.start
39
49
  opts[:url] = @service.uri
40
50
  end
@@ -47,10 +57,8 @@ module Selenium
47
57
  end
48
58
 
49
59
  def driver_extensions
50
- [
51
- DriverExtensions::TakesScreenshot,
52
- DriverExtensions::HasWebStorage
53
- ]
60
+ [DriverExtensions::TakesScreenshot,
61
+ DriverExtensions::HasWebStorage]
54
62
  end
55
63
 
56
64
  def capabilities
@@ -76,34 +84,24 @@ module Selenium
76
84
  raise ArgumentError, ':args must be an Array of Strings'
77
85
  end
78
86
 
79
- chrome_options['args'] = args.map(&:to_s)
87
+ args.map!(&:to_s)
80
88
  profile = opts.delete(:profile).as_json if opts.key?(:profile)
81
89
 
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]}"
84
92
  end
93
+ chrome_options['args'] = args unless args.empty?
85
94
 
86
95
  chrome_options['extensions'] = profile[:extensions] if profile && profile[:extensions]
87
96
  chrome_options['detach'] = true if opts.delete(:detach)
88
97
  chrome_options['prefs'] = opts.delete(:prefs) if opts.key?(:prefs)
89
98
 
90
- caps[:chrome_options] = chrome_options
99
+ caps[:chrome_options] = chrome_options unless chrome_options.empty?
91
100
  caps[:proxy] = opts.delete(:proxy) if opts.key?(:proxy)
92
101
  caps[:proxy] ||= opts.delete('proxy') if opts.key?('proxy')
93
102
 
94
103
  caps
95
104
  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
107
105
  end # Bridge
108
106
  end # Chrome
109
107
  end # WebDriver
@@ -48,6 +48,17 @@ module Selenium
48
48
  def cannot_connect_error_text
49
49
  "unable to connect to chromedriver #{@host}:#{@port}"
50
50
  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
51
62
  end # Service
52
63
  end # Chrome
53
64
  end # WebDriver
@@ -43,7 +43,7 @@ module Selenium
43
43
 
44
44
  def encode
45
45
  output = {type: type}
46
- output[:duration] = @duration * 1000 if @duration
46
+ output[:duration] = (@duration * 1000).to_i if @duration
47
47
  output
48
48
  end
49
49
  end # Interaction
@@ -45,11 +45,11 @@ module Selenium
45
45
 
46
46
  attr_accessor :host
47
47
 
48
- def initialize(executable_path, port, *extra_args)
48
+ def initialize(executable_path, port, driver_opts)
49
49
  @executable_path = binary_path(executable_path)
50
50
  @host = Platform.localhost
51
51
  @port = Integer(port)
52
- @extra_args = extra_args
52
+ @extra_args = extract_service_args(driver_opts)
53
53
 
54
54
  raise Error::WebDriverError, "invalid port: #{@port}" if @port < 1
55
55
  end
@@ -137,6 +137,13 @@ module Selenium
137
137
  def socket_lock
138
138
  @socket_lock ||= SocketLock.new(@port - 1, SOCKET_LOCK_TIMEOUT)
139
139
  end
140
+
141
+ protected
142
+
143
+ def extract_service_args(driver_opts)
144
+ driver_opts.key?(:args) ? driver_opts.delete(:args) : []
145
+ end
146
+
140
147
  end # Service
141
148
  end # WebDriver
142
149
  end # Selenium
@@ -26,19 +26,26 @@ module Selenium
26
26
 
27
27
  class Bridge < Remote::W3CBridge
28
28
  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
31
30
 
32
31
  unless opts.key?(:url)
33
32
  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))
35
44
  @service.host = 'localhost' if @service.host == '127.0.0.1'
36
45
  @service.start
37
46
  opts[:url] = @service.uri
38
47
  end
39
48
 
40
- opts[:desired_capabilities] ||= Remote::W3CCapabilities.edge
41
-
42
49
  super(opts)
43
50
  end
44
51
 
@@ -108,16 +115,6 @@ module Selenium
108
115
  def maximize_window(handle = :current)
109
116
  execute :maximize_window, window_handle: handle
110
117
  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
121
118
  end # Bridge
122
119
  end # Edge
123
120
  end # WebDriver
@@ -47,6 +47,14 @@ module Selenium
47
47
  def cannot_connect_error_text
48
48
  "unable to connect to MicrosoftWebDriver #{@host}:#{@port}"
49
49
  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
50
58
  end # Service
51
59
  end # Edge
52
60
  end # WebDriver
@@ -24,14 +24,20 @@ module Selenium
24
24
  class Bridge < Remote::Bridge
25
25
  def initialize(opts = {})
26
26
  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
28
34
 
29
35
  unless opts.key?(:url)
30
36
  port = opts.delete(:port) || DEFAULT_PORT
31
37
  profile = opts.delete(:profile)
32
38
 
33
39
  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
35
41
  @launcher.launch
36
42
  opts[:url] = @launcher.url
37
43
  end
@@ -58,12 +64,6 @@ module Selenium
58
64
  ensure
59
65
  @launcher.quit
60
66
  end
61
-
62
- private
63
-
64
- def create_launcher(port, profile)
65
- Launcher.new Binary.new, port, profile
66
- end
67
67
  end # Bridge
68
68
  end # Firefox
69
69
  end # WebDriver
@@ -51,6 +51,15 @@ module Selenium
51
51
  def cannot_connect_error_text
52
52
  "unable to connect to Mozilla geckodriver #{@host}:#{@port}"
53
53
  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
54
63
  end # Service
55
64
  end # Firefox
56
65
  end # WebDriver
@@ -26,11 +26,18 @@ module Selenium
26
26
  opts[:desired_capabilities] = create_capabilities(opts)
27
27
 
28
28
  unless opts.key?(:url)
29
+ driver_path = opts.delete(:driver_path) || Firefox.driver_path
29
30
  port = opts.delete(:port) || Service::DEFAULT_PORT
30
- service_args = opts.delete(:service_args) || {}
31
31
 
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))
34
41
  @service.start
35
42
  opts[:url] = @service.uri
36
43
  end
@@ -44,7 +51,7 @@ module Selenium
44
51
 
45
52
  def driver_extensions
46
53
  [DriverExtensions::TakesScreenshot,
47
- DriverExtensions::HasWebStorage]
54
+ DriverExtensions::HasWebStorage]
48
55
  end
49
56
 
50
57
  def quit
@@ -71,17 +78,6 @@ module Selenium
71
78
  Binary.path = caps[:firefox_options][:binary] if caps[:firefox_options].key?(:binary)
72
79
  caps
73
80
  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
-
85
81
  end # W3CBridge
86
82
  end # Firefox
87
83
  end # WebDriver
@@ -29,11 +29,26 @@ module Selenium
29
29
  opts[:desired_capabilities] ||= Remote::Capabilities.internet_explorer
30
30
 
31
31
  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)
35
32
  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))
37
52
  @service.start
38
53
  opts[:url] = @service.uri
39
54
  end
@@ -59,26 +74,6 @@ module Selenium
59
74
  ensure
60
75
  @service.stop if @service
61
76
  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
82
77
  end # Bridge
83
78
  end # IE
84
79
  end # WebDriver
@@ -47,6 +47,17 @@ module Selenium
47
47
  def cannot_connect_error_text
48
48
  "unable to connect to IE server #{@host}:#{@port}"
49
49
  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
50
61
  end # Server
51
62
  end # IE
52
63
  end # WebDriver
@@ -29,10 +29,20 @@ module Selenium
29
29
  opts[:desired_capabilities] ||= Remote::Capabilities.phantomjs
30
30
 
31
31
  unless opts.key?(:url)
32
- port = opts.delete(:port) || Service::DEFAULT_PORT
33
32
  driver_path = opts.delete(:driver_path) || PhantomJS.driver_path
34
- args = opts.delete(:args) || opts[:desired_capabilities]['phantomjs.cli.args']
35
- @service = Service.new(driver_path, port, *args)
33
+ port = opts.delete(:port) || Service::DEFAULT_PORT
34
+
35
+ opts[:driver_opts] ||= {}
36
+ if opts.key? :args
37
+ WebDriver.logger.warn <<-DEPRECATE.gsub(/\n +| {2,}/, ' ').freeze
38
+ [DEPRECATION] `:args` is deprecated. Pass switches using `driver_opts`
39
+ DEPRECATE
40
+ opts[:driver_opts][:args] = opts.delete(:args)
41
+ elsif opts[:desired_capabilities]['phantomjs.cli.args']
42
+ opts[:driver_opts][:args] = opts[:desired_capabilities]['phantomjs.cli.args']
43
+ end
44
+
45
+ @service = Service.new(driver_path, port, opts.delete(:driver_opts))
36
46
  @service.start
37
47
  opts[:url] = @service.uri
38
48
  end
@@ -81,17 +81,15 @@ module Selenium
81
81
  end
82
82
 
83
83
  def driver_extensions
84
- [
85
- DriverExtensions::UploadsFiles,
86
- DriverExtensions::TakesScreenshot,
87
- DriverExtensions::HasSessionId,
88
- DriverExtensions::Rotatable,
89
- DriverExtensions::HasTouchScreen,
90
- DriverExtensions::HasLocation,
91
- DriverExtensions::HasNetworkConnection,
92
- DriverExtensions::HasRemoteStatus,
93
- DriverExtensions::HasWebStorage
94
- ]
84
+ [DriverExtensions::UploadsFiles,
85
+ DriverExtensions::TakesScreenshot,
86
+ DriverExtensions::HasSessionId,
87
+ DriverExtensions::Rotatable,
88
+ DriverExtensions::HasTouchScreen,
89
+ DriverExtensions::HasLocation,
90
+ DriverExtensions::HasNetworkConnection,
91
+ DriverExtensions::HasRemoteStatus,
92
+ DriverExtensions::HasWebStorage]
95
93
  end
96
94
 
97
95
  def commands(command)
@@ -95,12 +95,20 @@ module Selenium
95
95
  ex.set_backtrace(backtrace + ex.backtrace)
96
96
  end
97
97
 
98
+ def error_payload
99
+ # Even errors are wrapped in 'value' for w3c
100
+ # Grab 'value' key for error, leave original payload alone and let the bridge process
101
+ @error_payload ||= !@payload.key?('sessionId') ? @payload['value'] : @payload
102
+ end
103
+
98
104
  def status
99
- @payload['status'] || @payload['error']
105
+ return unless error_payload.is_a? Hash
106
+ @status ||= error_payload['status'] || error_payload['error']
100
107
  end
101
108
 
102
109
  def value
103
- @payload['value'] || @payload['message']
110
+ return unless error_payload.is_a? Hash
111
+ @value ||= error_payload['value'] || error_payload['message']
104
112
  end
105
113
  end # Response
106
114
  end # Remote
@@ -85,14 +85,12 @@ module Selenium
85
85
  end
86
86
 
87
87
  def driver_extensions
88
- [
89
- DriverExtensions::UploadsFiles,
90
- DriverExtensions::TakesScreenshot,
91
- DriverExtensions::HasSessionId,
92
- DriverExtensions::Rotatable,
93
- DriverExtensions::HasRemoteStatus,
94
- DriverExtensions::HasWebStorage
95
- ]
88
+ [DriverExtensions::UploadsFiles,
89
+ DriverExtensions::TakesScreenshot,
90
+ DriverExtensions::HasSessionId,
91
+ DriverExtensions::Rotatable,
92
+ DriverExtensions::HasRemoteStatus,
93
+ DriverExtensions::HasWebStorage]
96
94
  end
97
95
 
98
96
  def commands(command)
@@ -113,7 +111,7 @@ module Selenium
113
111
  end
114
112
 
115
113
  def create_session(desired_capabilities)
116
- resp = raw_execute :new_session, {}, {desiredCapabilities: desired_capabilities}
114
+ resp = execute :new_session, {}, {desiredCapabilities: desired_capabilities}
117
115
  @session_id = resp['sessionId']
118
116
  return W3CCapabilities.json_create resp['value'] if @session_id
119
117
 
@@ -137,7 +135,8 @@ module Selenium
137
135
  end
138
136
 
139
137
  def timeout(type, milliseconds)
140
- execute :set_timeout, {}, {type: type, ms: milliseconds}
138
+ type = 'pageLoad' if type == 'page load'
139
+ execute :set_timeout, {}, {type => milliseconds}
141
140
  end
142
141
 
143
142
  #
@@ -600,21 +599,10 @@ module Selenium
600
599
  # executes a command on the remote server.
601
600
  #
602
601
  #
603
- # Returns the 'value' of the returned payload
604
- #
605
-
606
- def execute(*args)
607
- result = raw_execute(*args)
608
- result.payload.key?('value') ? result['value'] : result
609
- end
610
-
611
- #
612
- # executes a command on the remote server.
613
- #
614
602
  # @return [WebDriver::Remote::Response]
615
603
  #
616
604
 
617
- def raw_execute(command, opts = {}, command_hash = nil)
605
+ def execute(command, opts = {}, command_hash = nil)
618
606
  verb, path = commands(command) || raise(ArgumentError, "unknown command: #{command.inspect}")
619
607
  path = path.dup
620
608
 
@@ -629,7 +617,7 @@ module Selenium
629
617
  end
630
618
 
631
619
  WebDriver.logger.info("-> #{verb.to_s.upcase} #{path}")
632
- http.call verb, path, command_hash
620
+ http.call(verb, path, command_hash)['value']
633
621
  end
634
622
 
635
623
  def escaper
@@ -109,7 +109,7 @@ module Selenium
109
109
  caps.page_load_strategy = data.delete('pageLoadStrategy')
110
110
  timeouts = data.delete('timeouts')
111
111
  caps.implicit_timeout = timeouts['implicit'] if timeouts
112
- caps.page_load_timeout = timeouts['page load'] if timeouts
112
+ caps.page_load_timeout = timeouts['pageLoad'] if timeouts
113
113
  caps.script_timeout = timeouts['script'] if timeouts
114
114
 
115
115
  proxy = data.delete('proxy')
@@ -26,11 +26,18 @@ module Selenium
26
26
  opts[:desired_capabilities] ||= Remote::Capabilities.safari
27
27
 
28
28
  unless opts.key?(:url)
29
+ driver_path = opts.delete(:driver_path) || Safari.driver_path
29
30
  port = opts.delete(:port) || Service::DEFAULT_PORT
30
- service_args = opts.delete(:service_args) || {}
31
31
 
32
- driver_path = opts.delete(:driver_path) || Safari.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))
34
41
  @service.start
35
42
  opts[:url] = @service.uri
36
43
  end
@@ -43,12 +50,6 @@ module Selenium
43
50
  ensure
44
51
  @service.stop if @service
45
52
  end
46
-
47
- private
48
-
49
- def extract_service_args(args = {})
50
- args.key?(:port) ? ["--port=#{args[:port]}"] : []
51
- end
52
53
  end # Bridge
53
54
  end # Safari
54
55
  end # WebDriver
@@ -5,7 +5,7 @@ raise "cwd must be #{root} when reading gemspec" if root != Dir.pwd
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = 'selenium-webdriver'
8
- s.version = '3.2.2'
8
+ s.version = '3.3.0'
9
9
 
10
10
  s.authors = ['Alex Rodionov', 'Titus Fortner']
11
11
  s.email = ['p0deje@gmail.com', 'titusfortner@gmail.com']
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: selenium-webdriver
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 3.2.2
5
+ version: 3.3.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Alex Rodionov
@@ -11,7 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2017-03-01 00:00:00 -06:00
14
+ date: 2017-03-07 00:00:00 -06:00
15
15
  default_executable:
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency