selenium-webdriver 3.2.2 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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