watir 6.19.1 → 7.0.0.beta1

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.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/.github/actions/install-chrome/action.yml +1 -0
  3. data/.github/actions/setup-linux/action.yml +8 -0
  4. data/.github/workflows/tests.yml +100 -0
  5. data/CHANGES.md +7 -0
  6. data/README.md +1 -4
  7. data/Rakefile +1 -1
  8. data/lib/watir.rb +1 -45
  9. data/lib/watir/alert.rb +3 -8
  10. data/lib/watir/capabilities.rb +54 -230
  11. data/lib/watir/cell_container.rb +4 -4
  12. data/lib/watir/container.rb +4 -26
  13. data/lib/watir/elements/checkbox.rb +4 -4
  14. data/lib/watir/elements/date_field.rb +4 -4
  15. data/lib/watir/elements/date_time_field.rb +4 -4
  16. data/lib/watir/elements/element.rb +12 -49
  17. data/lib/watir/elements/file_field.rb +4 -4
  18. data/lib/watir/elements/font.rb +4 -4
  19. data/lib/watir/elements/hidden.rb +4 -4
  20. data/lib/watir/elements/html_elements.rb +444 -445
  21. data/lib/watir/elements/iframe.rb +4 -4
  22. data/lib/watir/elements/radio.rb +4 -4
  23. data/lib/watir/elements/select.rb +12 -78
  24. data/lib/watir/elements/svg_elements.rb +96 -96
  25. data/lib/watir/elements/text_field.rb +4 -4
  26. data/lib/watir/generator/base/generator.rb +4 -4
  27. data/lib/watir/generator/base/visitor.rb +0 -29
  28. data/lib/watir/generator/html/generator.rb +2 -1
  29. data/lib/watir/has_window.rb +4 -4
  30. data/lib/watir/http_client.rb +0 -8
  31. data/lib/watir/locators.rb +1 -5
  32. data/lib/watir/locators/button/matcher.rb +0 -23
  33. data/lib/watir/locators/button/selector_builder/xpath.rb +4 -15
  34. data/lib/watir/locators/element/matcher.rb +4 -19
  35. data/lib/watir/locators/element/selector_builder.rb +2 -37
  36. data/lib/watir/locators/element/selector_builder/xpath.rb +26 -41
  37. data/lib/watir/radio_set.rb +2 -2
  38. data/lib/watir/row_container.rb +4 -4
  39. data/lib/watir/version.rb +1 -1
  40. data/lib/watir/wait.rb +4 -74
  41. data/lib/watir/window.rb +6 -22
  42. data/lib/watir/window_collection.rb +5 -49
  43. data/lib/watirspec/implementation.rb +4 -0
  44. data/spec/spec_helper.rb +2 -7
  45. data/spec/unit/capabilities_spec.rb +196 -929
  46. data/spec/unit/match_elements/button_spec.rb +0 -13
  47. data/spec/unit/match_elements/element_spec.rb +38 -47
  48. data/spec/unit/match_elements/text_field_spec.rb +6 -6
  49. data/spec/unit/selector_builder/element_spec.rb +6 -23
  50. data/spec/unit/selector_builder/text_field_spec.rb +6 -7
  51. data/spec/watirspec/alert_spec.rb +4 -21
  52. data/spec/watirspec/browser_spec.rb +2 -2
  53. data/spec/watirspec/cookies_spec.rb +1 -1
  54. data/spec/watirspec/elements/button_spec.rb +0 -10
  55. data/spec/watirspec/elements/checkbox_spec.rb +10 -22
  56. data/spec/watirspec/elements/div_spec.rb +4 -34
  57. data/spec/watirspec/elements/divs_spec.rb +2 -2
  58. data/spec/watirspec/elements/element_spec.rb +38 -84
  59. data/spec/watirspec/elements/form_spec.rb +2 -4
  60. data/spec/watirspec/elements/links_spec.rb +4 -4
  61. data/spec/watirspec/elements/select_list_spec.rb +7 -108
  62. data/spec/watirspec/elements/span_spec.rb +2 -2
  63. data/spec/watirspec/elements/spans_spec.rb +1 -1
  64. data/spec/watirspec/elements/strong_spec.rb +1 -1
  65. data/spec/watirspec/html/non_control_elements.html +8 -3
  66. data/spec/watirspec/support/rspec_matchers.rb +1 -32
  67. data/spec/watirspec/window_switching_spec.rb +2 -49
  68. data/spec/watirspec_helper.rb +6 -1
  69. data/watir.gemspec +3 -4
  70. metadata +11 -32
  71. data/.github/workflows/linux.yml +0 -61
  72. data/.github/workflows/mac.yml +0 -55
  73. data/.github/workflows/unit.yml +0 -37
  74. data/.github/workflows/windows.yml +0 -39
  75. data/lib/watir/legacy_wait.rb +0 -123
  76. data/spec/unit/container_spec.rb +0 -35
  77. data/spec/watirspec/legacy_wait_spec.rb +0 -216
data/lib/watir/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Watir
2
- VERSION = '6.19.1'.freeze
2
+ VERSION = '7.0.0.beta1'.freeze
3
3
  end
data/lib/watir/wait.rb CHANGED
@@ -32,12 +32,7 @@ module Watir
32
32
  # @raise [TimeoutError] if timeout is exceeded
33
33
  #
34
34
 
35
- def until(depr_timeout = nil, depr_message = nil, timeout: nil, message: nil, interval: nil, object: nil)
36
- if depr_message || depr_timeout
37
- Watir.logger.deprecate 'Using arguments for Wait#until', 'keywords', ids: %i[until timeout_arguments]
38
- timeout = depr_timeout
39
- message = depr_message
40
- end
35
+ def until(timeout: nil, message: nil, interval: nil, object: nil)
41
36
  timeout ||= Watir.default_timeout
42
37
  run_with_timer(timeout, interval) do
43
38
  result = yield(object)
@@ -58,12 +53,7 @@ module Watir
58
53
  # @raise [TimeoutError] if timeout is exceeded
59
54
  #
60
55
 
61
- def while(depr_timeout = nil, depr_message = nil, timeout: nil, message: nil, interval: nil, object: nil)
62
- if depr_message || depr_timeout
63
- Watir.logger.deprecate 'Using arguments for Wait#while', 'keywords', ids: %i[while timeout_arguments]
64
- timeout = depr_timeout
65
- message = depr_message
66
- end
56
+ def while(timeout: nil, message: nil, interval: nil, object: nil)
67
57
  timeout ||= Watir.default_timeout
68
58
  run_with_timer(timeout, interval) { return unless yield(object) }
69
59
  raise TimeoutError, message_for(timeout, object, message)
@@ -111,12 +101,7 @@ module Watir
111
101
  # @param [String] message error message for when times out
112
102
  #
113
103
 
114
- def wait_until(depr_timeout = nil, depr_message = nil, timeout: nil, message: nil, interval: nil, **opt, &blk)
115
- if depr_message || depr_timeout
116
- Watir.logger.deprecate 'Using arguments for #wait_until', 'keywords', ids: [:timeout_arguments]
117
- timeout = depr_timeout
118
- message = depr_message
119
- end
104
+ def wait_until(timeout: nil, message: nil, interval: nil, **opt, &blk)
120
105
  message ||= proc { |obj| "waiting for true condition on #{obj.inspect}" }
121
106
 
122
107
  # TODO: Consider throwing argument error for mixing block & options
@@ -142,12 +127,7 @@ module Watir
142
127
  # @param [String] message error message for when times out
143
128
  #
144
129
 
145
- def wait_while(depr_timeout = nil, depr_message = nil, timeout: nil, message: nil, interval: nil, **opt, &blk)
146
- if depr_message || depr_timeout
147
- Watir.logger.deprecate 'Using arguments for #wait_while', 'keywords', ids: [:timeout_arguments]
148
- timeout = depr_timeout
149
- message = depr_message
150
- end
130
+ def wait_while(timeout: nil, message: nil, interval: nil, **opt, &blk)
151
131
  message ||= proc { |obj| "waiting for false condition on #{obj.inspect}" }
152
132
 
153
133
  # TODO: Consider throwing argument error for mixing block & options
@@ -158,56 +138,6 @@ module Watir
158
138
  self
159
139
  end
160
140
 
161
- #
162
- # Waits until the element is present.
163
- # Element is always relocated, so this can be used in the case of an element going away and returning
164
- #
165
- # @example
166
- # browser.text_field(name: "new_user_first_name").wait_until_present
167
- #
168
- # @param [Integer] timeout seconds to wait before timing out
169
- # @param [Float] interval seconds to wait before each try
170
- # @param [String] message error message for when times out
171
- #
172
- # @see Watir::Wait
173
- # @see Watir::Element#present?
174
- #
175
-
176
- def wait_until_present(depr_timeout = nil, timeout: nil, interval: nil, message: nil)
177
- timeout = depr_timeout if depr_timeout
178
- Watir.logger.deprecate "#{self.class}#wait_until_present",
179
- "#{self.class}#wait_until(&:present?)",
180
- ids: [:wait_until_present]
181
-
182
- message ||= proc { |obj| "waiting for #{obj.inspect} to become present" }
183
- wait_until(timeout: timeout, interval: interval, message: message, element_reset: true, &:present?)
184
- end
185
-
186
- #
187
- # Waits while the element is present.
188
- # Element is always relocated, so this can be used in the case of the element changing attributes
189
- #
190
- # @example
191
- # browser.text_field(name: "abrakadbra").wait_while_present
192
- #
193
- # @param [Integer] timeout seconds to wait before timing out
194
- # @param [Float] interval seconds to wait before each try
195
- # @param [String] message error message for when times out
196
- #
197
- # @see Watir::Wait
198
- # @see Watir::Element#present?
199
- #
200
-
201
- def wait_while_present(depr_timeout = nil, timeout: nil, interval: nil, message: nil)
202
- timeout = depr_timeout if depr_timeout
203
- Watir.logger.deprecate "#{self.class}#wait_while_present",
204
- "#{self.class}#wait_while(&:present?)",
205
- ids: [:wait_while_present]
206
-
207
- message ||= proc { |obj| "waiting for #{obj.inspect} not to be present" }
208
- wait_while(timeout: timeout, interval: interval, message: message, element_reset: true, &:present?)
209
- end
210
-
211
141
  private
212
142
 
213
143
  def create_proc(opt)
data/lib/watir/window.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  module Watir
2
2
  class Window
3
- include EventuallyPresent
4
3
  include Waitable
5
4
  include Exception
6
5
 
@@ -16,7 +15,7 @@ module Watir
16
15
  elsif selector.key? :handle
17
16
  @handle = selector.delete :handle
18
17
  else
19
- return if selector.keys.all? { |k| %i[title url index element].include? k }
18
+ return if selector.keys.all? { |k| %i[title url element].include? k }
20
19
 
21
20
  raise ArgumentError, "invalid window selector: #{selector_string}"
22
21
  end
@@ -113,7 +112,7 @@ module Watir
113
112
  # Returns true if two windows are equal.
114
113
  #
115
114
  # @example
116
- # browser.window(index: 0) == browser.window(index: 1)
115
+ # browser.window(title: /window_switching/) == browser.window(/closeable/)
117
116
  # #=> false
118
117
  #
119
118
  # @param [Window] other
@@ -190,8 +189,6 @@ module Watir
190
189
  #
191
190
  # @api private
192
191
  #
193
- # Referenced in EventuallyPresent
194
- #
195
192
 
196
193
  def selector_string
197
194
  @selector.inspect
@@ -204,16 +201,7 @@ module Watir
204
201
  private
205
202
 
206
203
  def locate
207
- if @selector.empty?
208
- nil
209
- elsif @selector.key?(:index)
210
- Watir.logger.deprecate 'Using :index as a selector for Window', ':title or :url or :element',
211
- reference: 'http://watir.com/guides/windows/#locating-by-index-is-no-longer-supported',
212
- ids: [:window_index]
213
- @driver.window_handles[Integer(@selector[:index])]
214
- else
215
- @driver.window_handles.find { |wh| matches?(wh) }
216
- end
204
+ @selector.empty? ? nil : @driver.window_handles.find { |wh| matches?(wh) }
217
205
  end
218
206
 
219
207
  def assert_exists
@@ -243,13 +231,9 @@ module Watir
243
231
  end
244
232
 
245
233
  def wait_for_exists
246
- return assert_exists unless Watir.relaxed_locate?
247
-
248
- begin
249
- wait_until(&:exists?)
250
- rescue Wait::TimeoutError
251
- raise NoMatchingWindowFoundException, selector_string
252
- end
234
+ wait_until(&:exists?)
235
+ rescue Wait::TimeoutError
236
+ raise NoMatchingWindowFoundException, selector_string
253
237
  end
254
238
  end # Window
255
239
  end # Watir
@@ -27,47 +27,12 @@ module Watir
27
27
  alias size count
28
28
  alias empty? none?
29
29
 
30
- #
31
- # First window of the collection
32
- #
33
- # @note windows in a collection are not ordered so this is not reliably
34
- # @deprecated use Browser#switch_window or a better Window locator
35
- # @return [Watir::Window] Returns an instance of a Watir::Window
36
- #
37
-
38
- def first
39
- self[0]
40
- end
41
-
42
- #
43
- # Last window of the collection
44
- #
45
- # @note windows in a collection are not ordered so this is not reliably
46
- # @deprecated use Browser#switch_window or a better Window locator
47
- # @return [Watir::Window] Returns an instance of a Watir::Window
48
- #
49
-
50
- def last
51
- self[-1]
52
- end
53
-
54
- #
55
- # Get the window at the given index or range.
56
- #
57
- # @note windows in a collection are not ordered so this is not reliably
58
- # @deprecated use Browser#switch_window or a better Window locator
59
- # @param [Integer, Range] value Index (0-based) or Range of desired window(s)
60
- # @return [Watir::Window] Returns an instance of a Watir::Window
61
- #
62
-
63
- def [](value)
64
- old = 'using indexing with windows'
65
- new = 'Browser#switch_window or Browser#window with :title, :url or :element selectors'
66
- reference = 'http://watir.com/window_indexes'
67
- Watir.logger.deprecate old, new, reference: reference, ids: [:window_index]
68
-
69
- window_list[value]
30
+ def [](*)
31
+ raise NoMethodError, 'indexing not reliable on WindowCollection'
70
32
  end
33
+ alias first []
34
+ alias last []
35
+ alias to_a []
71
36
 
72
37
  def ==(other)
73
38
  window_list == other.send(:window_list)
@@ -78,15 +43,6 @@ module Watir
78
43
  @window_list = nil
79
44
  end
80
45
 
81
- def to_a
82
- old = 'WindowCollection#to_a to interact with indexed windows'
83
- new = 'Enumerable methods to iterate over windows'
84
- reference = 'http://watir.com/window_indexes'
85
- Watir.logger.deprecate old, new, reference: reference, ids: [:window_index]
86
-
87
- window_list
88
- end
89
-
90
46
  private
91
47
 
92
48
  def window_list
@@ -19,6 +19,10 @@ module WatirSpec
19
19
  @name || raise('implementation name not set')
20
20
  end
21
21
 
22
+ def browser_name
23
+ browser_args.first == :ie ? :internet_explorer : browser_args.first
24
+ end
25
+
22
26
  def matches_guard?(args)
23
27
  return @guard_proc.call(args) if @guard_proc
24
28
 
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
3
 
4
- if ENV['GITHUB_ACTIONS'] || ENV['COVERAGE']
4
+ if ENV['COVERAGE']
5
5
  require 'coveralls'
6
6
  require 'simplecov'
7
7
  require 'simplecov-console'
@@ -12,7 +12,6 @@ if ENV['GITHUB_ACTIONS'] || ENV['COVERAGE']
12
12
  add_filter %r{/spec/}
13
13
  add_filter 'lib/watir/elements/html_elements.rb'
14
14
  add_filter 'lib/watir/elements/svg_elements.rb'
15
- add_filter 'lib/watir/legacy_wait.rb'
16
15
  add_filter 'lib/watirspec'
17
16
  refuse_coverage_drop
18
17
  end
@@ -22,7 +21,7 @@ require 'watir'
22
21
  require 'locator_spec_helper'
23
22
  require 'rspec'
24
23
 
25
- if ENV['GITHUB_ACTIONS']
24
+ if ENV['AUTOMATIC_RETRY']
26
25
  require 'rspec/retry'
27
26
  RSpec.configure do |config|
28
27
  config.verbose_retry = true
@@ -31,7 +30,3 @@ if ENV['GITHUB_ACTIONS']
31
30
  config.exceptions_to_retry = [IOError, Net::ReadTimeout]
32
31
  end
33
32
  end
34
-
35
- SELENIUM_SELECTORS = %i[css tag_name xpath link_text partial_link_text link].freeze
36
-
37
- Watir.relaxed_locate = false if ENV['RELAXED_LOCATE'] == 'false'
@@ -1,19 +1,7 @@
1
1
  require 'watirspec_helper'
2
2
 
3
3
  describe Watir::Capabilities do
4
- before do
5
- compliant_on :v6_18 do
6
- ENV['IGNORE_DEPRECATIONS'] = 'true'
7
- end
8
- end
9
-
10
- before do
11
- compliant_on :v6_18 do
12
- ENV['IGNORE_DEPRECATIONS'] = 'true'
13
- end
14
- end
15
-
16
- after(:all) { ENV['IGNORE_DEPRECATIONS'] = nil }
4
+ before(:all) { Watir.logger.ignore(:watir_client) }
17
5
 
18
6
  def expected_browser(browser)
19
7
  case browser
@@ -45,25 +33,7 @@ describe Watir::Capabilities do
45
33
  service_class(browser).driver_path = nil
46
34
  end
47
35
 
48
- def default_client
49
- compliant_on :v6_18 do
50
- return Selenium::WebDriver::Remote::Http::Default
51
- end
52
- Watir::HttpClient
53
- end
54
-
55
- def capabilities_key
56
- compliant_on :v6_18 do
57
- return :desired_capabilities
58
- end
59
- :capabilities
60
- end
61
-
62
- supported_browsers = %i[chrome firefox ie safari]
63
-
64
- not_compliant_on :v6_18, :v6_19 do
65
- supported_browsers << :edge
66
- end
36
+ supported_browsers = %i[chrome edge firefox ie safari]
67
37
 
68
38
  # Options:
69
39
  # :listener
@@ -73,93 +43,38 @@ describe Watir::Capabilities do
73
43
  # :capabilities (incompatible with options)
74
44
 
75
45
  supported_browsers.each do |browser_symbol|
76
- # 6.18 works except for safari
77
- # 6.19 fix safari
78
- # 7.0 remove Capabilities requirement
79
- it 'just browser has client, options & capabilities but not service' do
80
- compliant_on :v6_18 do
81
- skip if browser_symbol == :safari # No extra processing needed
82
- end
46
+ it 'just browser has client & capabilities not service' do
83
47
  capabilities = Watir::Capabilities.new(browser_symbol)
84
48
 
85
49
  args = capabilities.to_args
86
- expect(args.last[:http_client]).to be_a default_client
87
- expect(args.last[:options]).to be_a options_class(browser_symbol)
88
- expect(args.last[:desired_capabilities]).to be_a(Selenium::WebDriver::Remote::Capabilities)
50
+ expect(args.last[:http_client]).to be_a Watir::HttpClient
51
+ expect(args.last[:capabilities]).to be_a options_class(browser_symbol)
89
52
  expect(args.last).not_to include(:service)
90
53
  end
91
54
 
92
- # 6.18 never implemented
93
- # 6.19 implement
94
- # 7.0 valid
95
- not_compliant_on :v6_18 do
96
- it 'just options has client, options & capabilities but not service' do
97
- capabilities = Watir::Capabilities.new(options: options_class(browser_symbol).new)
55
+ it 'just options has client & options but not capabilities or service' do
56
+ capabilities = Watir::Capabilities.new(options: options_class(browser_symbol).new)
98
57
 
99
- args = capabilities.to_args
100
-
101
- expect(args.last[:http_client]).to be_a default_client
102
- expect(args.last[:options]).to be_a options_class(browser_symbol)
103
- expect(args.last[:desired_capabilities]).to be_a(Selenium::WebDriver::Remote::Capabilities)
104
- expect(args.last[:desired_capabilities].browser_name).to eq expected_browser(browser_symbol)
105
- expect(args.last).not_to include(:service)
106
- end
107
- end
108
-
109
- # 6.18 never implemented
110
- # 6.19 implement
111
- # 7.0 valid
112
- not_compliant_on :v6_18 do
113
- it 'just capabilities has client, options & capabilities but not service' do
114
- caps = Selenium::WebDriver::Remote::Capabilities.send(browser_symbol)
115
- capabilities = Watir::Capabilities.new(capabilities_key => caps)
116
-
117
- args = capabilities.to_args
58
+ args = capabilities.to_args
118
59
 
119
- expect(args.last[:http_client]).to be_a default_client
120
- expect(args.last[:options]).to be_a options_class(browser_symbol)
121
- expect(args.last[:desired_capabilities]).to be_a(Selenium::WebDriver::Remote::Capabilities)
122
- expect(args.last[:desired_capabilities].browser_name).to eq expected_browser(browser_symbol)
123
- expect(args.last).not_to include(:service)
124
- end
60
+ expect(args.last[:http_client]).to be_a Watir::HttpClient
61
+ expect(args.last[:capabilities]).to be_a options_class(browser_symbol)
62
+ expect(args.last).not_to include(:service)
125
63
  end
126
64
 
127
- # 6.18 works
128
- # 6.19 deprecate :desired_capabilities
129
- # 7.0 raise exception
130
- it 'desired_capabilities works but deprecated' do
131
- expect {
132
- desired_capabilities = Selenium::WebDriver::Remote::Capabilities.send(browser_symbol)
133
- capabilities = Watir::Capabilities.new(browser_symbol,
134
- desired_capabilities: desired_capabilities)
135
- args = capabilities.to_args
136
- expect(args.first).to eq browser_symbol
137
- desired_capabilities = args.last[:desired_capabilities]
138
- expect(desired_capabilities).to be_a(Selenium::WebDriver::Remote::Capabilities)
139
- expect(desired_capabilities.browser_name).to eq expected_browser(browser_symbol)
140
- }.to have_deprecated_desired_capabilities
141
- end
65
+ it 'just capabilities has client & capabilities but not service' do
66
+ caps = Selenium::WebDriver::Remote::Capabilities.send(browser_symbol)
67
+ capabilities = Watir::Capabilities.new(capabilities: caps)
142
68
 
143
- # 6.18 broken; puts service in desired capabilities so of course not there
144
- # 6.19 fix with deprecation
145
- # 7.0 raise exception
146
- it 'service not allowed when url specified' do
147
- halt_service(browser_symbol)
69
+ args = capabilities.to_args
148
70
 
149
- expect {
150
- capabilities = Watir::Capabilities.new(browser_symbol,
151
- url: 'http://example.com',
152
- service: service_class(browser_symbol).new)
153
- args = capabilities.to_args
154
- expect(args.first).to eq :remote
155
- expect(args.last).not_to include(:service)
156
- }.to have_deprecated_url_service
71
+ expect(args.last[:http_client]).to be_a Watir::HttpClient
72
+ expect(args.last[:capabilities]).to be_a(Selenium::WebDriver::Remote::Capabilities)
73
+ expect(args.last[:capabilities].browser_name).to eq expected_browser(browser_symbol)
74
+ expect(args.last).not_to include(:service)
157
75
  end
158
76
 
159
77
  context 'service' do
160
- # 6.18 never implemented
161
- # 6.19 implement
162
- # 7.0 valid
163
78
  it 'uses provided service' do
164
79
  halt_service(browser_symbol)
165
80
 
@@ -171,76 +86,33 @@ describe Watir::Capabilities do
171
86
  expect(actual_service.instance_variable_get('@port')).to eq 1234
172
87
  end
173
88
 
174
- # 6.18 never implemented
175
- # 6.19 implement!
176
- # 7.0 valid
177
- not_compliant_on :v6_18 do
178
- it 'builds service from a Hash' do
179
- halt_service(browser_symbol)
180
-
181
- service = {port: 1234, path: '/path/to/driver', args: %w[--foo --bar]}
182
- capabilities = Watir::Capabilities.new(browser_symbol, service: service)
183
- args = capabilities.to_args
184
- expect(args.first).to eq browser_symbol
185
- actual_service = args.last[:service]
186
- expect(actual_service.instance_variable_get('@port')).to eq 1234
187
- expect(actual_service.instance_variable_get('@executable_path')).to eq '/path/to/driver'
188
- expect(actual_service.instance_variable_get('@extra_args')).to include '--foo', '--bar'
189
- end
190
-
191
- it 'is a bad argument to service' do
192
- capabilities = Watir::Capabilities.new(browser_symbol, service: 7)
193
-
194
- expect { capabilities.to_args }.to raise_exception(TypeError)
195
- end
196
- end
197
-
198
- # 6.18 broken: puts it in desired capabilities (neither ":path" nor ":driver_path" work)
199
- # 6.19 do nothing
200
- # 7.0 remove
201
- xit 'creates when :path specified' do
89
+ it 'builds service from a Hash' do
202
90
  halt_service(browser_symbol)
203
- capabilities = Watir::Capabilities.new(browser_symbol, path: '/path/to/driver')
204
91
 
92
+ service = {port: 1234, path: '/path/to/driver', args: %w[--foo --bar]}
93
+ capabilities = Watir::Capabilities.new(browser_symbol, service: service)
205
94
  args = capabilities.to_args
206
- expect(args.last[:path]).to eq '/path/to/driver'
95
+ expect(args.first).to eq browser_symbol
96
+ actual_service = args.last[:service]
97
+ expect(actual_service.instance_variable_get('@port')).to eq 1234
98
+ expect(actual_service.instance_variable_get('@executable_path')).to eq '/path/to/driver'
99
+ expect(actual_service.instance_variable_get('@extra_args')).to include '--foo', '--bar'
207
100
  end
208
101
 
209
- # 6.18 works - puts them at top level in selenium opts, which Selenium 3 can read
210
- # 6.19 deprecate - put inside :service keyword
211
- # 7.0 remove
212
- it 'creates when service port specified' do
213
- halt_service(browser_symbol)
102
+ it 'is a bad argument to service' do
103
+ capabilities = Watir::Capabilities.new(browser_symbol, service: 7)
214
104
 
215
- expect {
216
- capabilities = Watir::Capabilities.new(browser_symbol,
217
- port: 1234)
218
- @args = capabilities.to_args
219
- }.to have_deprecated_port_keyword
220
-
221
- compliant_on :v6_18 do
222
- expect(@args.last[:port]).to eq 1234
223
- end
224
-
225
- not_compliant_on :v6_18 do
226
- expect(@args.last[:service].instance_variable_get('@port')).to eq 1234
227
- end
105
+ expect { capabilities.to_args }.to raise_exception(TypeError)
228
106
  end
229
107
  end
230
108
 
231
109
  context 'http_client' do
232
- # 6.18 works
233
- # 6.19 update to Watir::HttpClient
234
- # 7.0 valid
235
110
  it 'uses default HTTP Client' do
236
111
  capabilities = Watir::Capabilities.new(browser_symbol)
237
112
  args = capabilities.to_args
238
- expect(args.last[:http_client]).to be_a default_client
113
+ expect(args.last[:http_client]).to be_a Watir::HttpClient
239
114
  end
240
115
 
241
- # 6.18 works
242
- # 6.19 do nothing
243
- # 7.0 valid
244
116
  it 'accepts an HTTP Client object' do
245
117
  client = Selenium::WebDriver::Remote::Http::Default.new
246
118
  capabilities = Watir::Capabilities.new(browser_symbol, http_client: client)
@@ -248,68 +120,23 @@ describe Watir::Capabilities do
248
120
  expect(args.last[:http_client]).to eq client
249
121
  end
250
122
 
251
- # 6.18 Not implemented
252
- # 6.19 implement!
253
- # 7.0 valid
254
- not_compliant_on :v6_18 do
255
- it 'builds an HTTP Client from Hash' do
256
- client_opts = {open_timeout: 10, read_timeout: 10}
257
- capabilities = Watir::Capabilities.new(browser_symbol, http_client: client_opts)
258
- args = capabilities.to_args
259
- actual_client = args.last[:http_client]
260
- expect(actual_client).to be_a default_client
261
- expect(actual_client.instance_variable_get('@read_timeout')).to eq 10
262
- expect(actual_client.instance_variable_get('@open_timeout')).to eq 10
263
- end
264
- end
265
-
266
- # 6.18 Not implemented
267
- # 6.19 implement!
268
- # 7.0 valid
269
- not_compliant_on :v6_18 do
270
- it 'raises an exception if :client receives something other than Hash or Client object' do
271
- expect {
272
- Watir::Capabilities.new(browser_symbol, http_client: 7).to_args
273
- }.to raise_exception(TypeError, ':http_client must be a Hash or a Selenium HTTP Client instance')
274
- end
123
+ it 'builds an HTTP Client from Hash' do
124
+ client_opts = {open_timeout: 10, read_timeout: 10}
125
+ capabilities = Watir::Capabilities.new(browser_symbol, http_client: client_opts)
126
+ args = capabilities.to_args
127
+ actual_client = args.last[:http_client]
128
+ expect(actual_client).to be_a Watir::HttpClient
129
+ expect(actual_client.instance_variable_get('@read_timeout')).to eq 10
130
+ expect(actual_client.instance_variable_get('@open_timeout')).to eq 10
275
131
  end
276
132
 
277
- # 6.18 works
278
- # 6.19 deprecate --> client_timeout isn't a thing any more
279
- # 7.0 remove
280
- it 'builds a client from client_timeout' do
133
+ it 'raises an exception if :client receives something other than Hash or Client object' do
281
134
  expect {
282
- opt = {client_timeout: 10}
283
- capabilities = Watir::Capabilities.new(browser_symbol, opt)
284
- args = capabilities.to_args
285
- actual_client = args.last[:http_client]
286
- expect(actual_client).to be_a default_client
287
- expect(actual_client.instance_variable_get('@read_timeout')).to eq 10
288
- expect(actual_client.instance_variable_get('@open_timeout')).to eq 10
289
- }.to have_deprecated_http_client_timeout
290
- end
291
-
292
- # 6.18 works
293
- # 6.19 deprecate --> timeouts inside http_client key
294
- # 7.0 remove
295
- %i[open_timeout read_timeout].each do |timeout|
296
- it "builds a client from #{timeout}" do
297
- expect {
298
- opt = {timeout => 10}
299
-
300
- capabilities = Watir::Capabilities.new(browser_symbol, opt)
301
- args = capabilities.to_args
302
- actual_client = args.last[:http_client]
303
- expect(actual_client).to be_a default_client
304
- expect(actual_client.instance_variable_get("@#{timeout}")).to eq 10
305
- }.to send("have_deprecated_http_#{timeout}")
306
- end
135
+ Watir::Capabilities.new(browser_symbol, http_client: 7).to_args
136
+ }.to raise_exception(TypeError, ':http_client must be a Hash or a Selenium HTTP Client instance')
307
137
  end
308
138
  end
309
139
 
310
- # 6.18 works
311
- # 6.19 do nothing
312
- # 7.0 valid
313
140
  it 'uses a listener' do
314
141
  listener = Selenium::WebDriver::Support::AbstractEventListener.new
315
142
  capabilities = Watir::Capabilities.new(browser_symbol, listener: listener)
@@ -317,69 +144,13 @@ describe Watir::Capabilities do
317
144
  expect(args.last[:listener]).to eq listener
318
145
  end
319
146
 
320
- # 6.18 works
321
- # 6.19 warn
322
- # 7.0 Raise Exception
323
147
  it 'accepts both capabilities and Options' do
324
148
  caps = Selenium::WebDriver::Remote::Capabilities.send(browser_symbol)
325
149
  opts = options_class(browser_symbol).new
326
150
 
327
151
  expect {
328
- @capabilities = Watir::Capabilities.new(browser_symbol,
329
- capabilities_key => caps,
330
- options: opts)
331
- }.to have_deprecated_options_capabilities
332
-
333
- args = @capabilities.to_args
334
- expect(args.last[:desired_capabilities]).to eq caps
335
-
336
- # Safari never implemented to accept options
337
- if browser_symbol == :safari
338
- not_compliant_on :v6_18 do
339
- expect(args.last[:options]).to eq opts
340
- end
341
- end
342
- end
343
-
344
- # 6.18 works
345
- # 6.19 deprecate --> put in options
346
- # 7.0 remove
347
- context 'extra things' do
348
- it 'puts in capabilities when capabilities not specified' do
349
- expect {
350
- capabilities = Watir::Capabilities.new(browser_symbol, foo: 'bar')
351
- args = capabilities.to_args
352
- expect(args.last[:desired_capabilities][:foo]).to eq 'bar'
353
- }.to have_deprecated_unknown_keyword
354
- end
355
-
356
- # 6.18 works
357
- # 6.19 deprecate --> put in options
358
- # 7.0 remove
359
- it 'puts in top level when Capabilities specified' do
360
- caps = Selenium::WebDriver::Remote::Capabilities.send(browser_symbol)
361
- capabilities = Watir::Capabilities.new(browser_symbol,
362
- capabilities_key => caps,
363
- foo: 'bar')
364
- expect {
365
- expect(capabilities.to_args.last[:foo]).to eq 'bar'
366
- }.to have_deprecated_unknown_keyword
367
- end
368
-
369
- # 6.18 works
370
- # 6.19 deprecate --> put in options
371
- # 7.0 remove
372
- it 'puts in top level when Options specified' do
373
- expect {
374
- caps = Selenium::WebDriver::Remote::Capabilities.send(browser_symbol)
375
- capabilities = Watir::Capabilities.new(browser_symbol,
376
- capabilities_key => caps,
377
- options: options_class(browser_symbol).new,
378
- foo: 'bar')
379
- args = capabilities.to_args
380
- expect(args.last[:foo]).to eq 'bar'
381
- }.to have_deprecated_unknown_keyword
382
- end
152
+ Watir::Capabilities.new(browser_symbol, capabilities: caps, options: opts)
153
+ }.to raise_exception(ArgumentError, ':capabilities and :options are not both allowed')
383
154
  end
384
155
  end
385
156
 
@@ -392,104 +163,26 @@ describe Watir::Capabilities do
392
163
  # :capabilities (incompatible with options)
393
164
 
394
165
  describe 'Remote execution' do
395
- # 6.18 Was not implemented
396
- # 6.19 Implement
397
- # 7.0 Valid
398
- not_compliant_on :v6_18 do
399
- it 'with just url' do
400
- capabilities = Watir::Capabilities.new(url: 'http://example.com')
401
- args = capabilities.to_args
402
- expect(args.first).to eq :remote
403
- desired_capabilities = args.last[:desired_capabilities]
404
- expect(desired_capabilities).to be_a(Selenium::WebDriver::Remote::Capabilities)
405
- expect(desired_capabilities.browser_name).to eq 'chrome'
406
- end
407
- end
408
-
409
- # 6.18 does not work
410
- # 6.19 do nothing
411
- # 7.0 remove
412
- xit ':remote keyword with url has options, chrome and client but not service' do
413
- capabilities = Watir::Capabilities.new(:remote,
414
- url: 'https://example.com/wd/hub/')
166
+ it 'with just url' do
167
+ capabilities = Watir::Capabilities.new(url: 'http://example.com')
415
168
  args = capabilities.to_args
416
169
  expect(args.first).to eq :remote
417
- expect(args.last[:url]).to eq 'https://example.com/wd/hub'
418
- expect(args.last[:http_client]).to be_a default_client
419
- expect(args.last[:options]).to be_a Selenium::WebDriver::Chrome::Options
420
- desired_capabilities = args.last[:desired_capabilities]
421
- expect(desired_capabilities).to be_a(Selenium::WebDriver::Remote::Capabilities)
422
- expect(desired_capabilities.browser_name).to eq 'chrome'
423
- expect(args.last).not_to include(:service)
170
+ actual_options = args.last[:capabilities]
171
+ expect(actual_options.browser_name).to eq 'chrome'
424
172
  end
425
173
 
426
- # 6.18 works
427
- # 6.19 this should use options instead of capabilities
428
- # 7.0 valid
429
174
  it 'browser name with url has capabilities and client but not service' do
430
175
  capabilities = Watir::Capabilities.new(:firefox,
431
176
  url: 'https://example.com/wd/hub/')
432
177
  args = capabilities.to_args
433
178
  expect(args.first).to eq :remote
434
179
  expect(args.last[:url]).to eq 'https://example.com/wd/hub/'
435
- expect(args.last[:http_client]).to be_a default_client
436
-
437
- not_compliant_on :v6_18 do
438
- expect(args.last[:options]).to be_a Selenium::WebDriver::Firefox::Options
439
- end
440
-
441
- not_compliant_on :v6_19 do
442
- desired_capabilities = args.last[:desired_capabilities]
443
- expect(desired_capabilities).to be_a(Selenium::WebDriver::Remote::Capabilities)
444
- expect(desired_capabilities.browser_name).to eq 'firefox'
445
- end
180
+ expect(args.last[:http_client]).to be_a Watir::HttpClient
446
181
 
182
+ expect(args.last[:capabilities]).to be_a Selenium::WebDriver::Firefox::Options
447
183
  expect(args.last).not_to include(:service)
448
184
  end
449
185
 
450
- # 6.18 works
451
- # 6.19 deprecate :remote_keyword
452
- # 7.0 remove
453
- it 'remote keyword with url and browser name' do
454
- expect {
455
- capabilities = Watir::Capabilities.new(:remote,
456
- {browser: :firefox,
457
- url: 'https://example.com'})
458
- args = capabilities.to_args
459
- expect(args.first).to eq :remote
460
- desired_capabilities = args.last[:desired_capabilities]
461
- expect(desired_capabilities).to be_a(Selenium::WebDriver::Remote::Capabilities)
462
- expect(desired_capabilities.browser_name).to eq 'firefox'
463
- }.to have_deprecated_remote_keyword
464
- end
465
-
466
- # 6.18 not implemented
467
- # 6.19 do nothing
468
- # 7.0 remove
469
- xit 'remote keyword errors when given a service' do
470
- capabilities = Watir::Capabilities.new(:remote,
471
- url: 'http://example.com',
472
- service: Selenium::WebDriver::Chrome::Service.new)
473
-
474
- capabilities.to_args
475
- end
476
-
477
- # 6.18 not implemented; just ignores them
478
- # 6.19 throw error
479
- # 7.0 throw error
480
- not_compliant_on :v6_18 do
481
- it 'browser name errors when given a service' do
482
- expect {
483
- Watir::Capabilities.new(:chrome,
484
- url: 'http://example.com',
485
- service: Selenium::WebDriver::Chrome::Service.new)
486
- }.to have_deprecated_url_service
487
- end
488
- end
489
-
490
- # 6.18 works
491
- # 6.19 nothing
492
- # 7.0 valid
493
186
  it 'accepts a listener' do
494
187
  listener = Selenium::WebDriver::Support::AbstractEventListener.new
495
188
  capabilities = Watir::Capabilities.new(:chrome,
@@ -499,745 +192,319 @@ describe Watir::Capabilities do
499
192
  expect(args.last[:listener]).to eq listener
500
193
  end
501
194
 
502
- # 6.18 not implemented (should have defaulted to chrome)
503
- # 6.19 do nothing; it never worked
504
- # 7.0 remove
505
- xit 'remote keyword with url and http client object' do
506
- client = default_client.new
507
- capabilities = Watir::Capabilities.new(:remote,
508
- url: 'https://example.com/wd/hub',
509
- http_client: client)
510
- args = capabilities.to_args
511
- expect(args.first).to eq :remote
512
- expect(args.last[:http_client]).to eq client
513
- desired_capabilities = args.last[:desired_capabilities]
514
- expect(desired_capabilities).to be_a(Selenium::WebDriver::Remote::Capabilities)
515
- expect(desired_capabilities.browser_name).to eq 'chrome'
516
- end
517
-
518
- # 6.18 works
519
- # 6.19 nothing
520
- # 7.0 valid
521
195
  it 'browser name with url and http client object' do
522
- client = default_client.new
196
+ client = Watir::HttpClient.new
523
197
  capabilities = Watir::Capabilities.new(:chrome,
524
198
  url: 'https://example.com/wd/hub',
525
199
  http_client: client)
526
200
  args = capabilities.to_args
527
201
  expect(args.first).to eq :remote
528
202
  expect(args.last[:http_client]).to eq client
529
- desired_capabilities = args.last[:desired_capabilities]
530
- expect(desired_capabilities).to be_a(Selenium::WebDriver::Remote::Capabilities)
531
- expect(desired_capabilities.browser_name).to eq 'chrome'
203
+ actual_options = args.last[:capabilities]
204
+ expect(actual_options.browser_name).to eq 'chrome'
532
205
  end
533
206
 
534
- # 6.18 not implemented (should have defaulted to chrome)
535
- # 6.19 do nothing; never worked
536
- # 7.0 remove
537
- xit 'remote keyword with url and http client Hash' do
538
- capabilities = Watir::Capabilities.new(:remote,
207
+ it 'browser name with url and http client Hash' do
208
+ capabilities = Watir::Capabilities.new(:chrome,
539
209
  url: 'https://example.com/wd/hub',
540
- client: {read_timeout: 30})
210
+ http_client: {read_timeout: 30})
541
211
  args = capabilities.to_args
542
212
  expect(args.first).to eq :remote
543
213
  expect(args.last[:http_client].instance_variable_get('@read_timeout')).to eq 30
544
- desired_capabilities = args.last[:desired_capabilities]
545
- expect(desired_capabilities).to be_a(Selenium::WebDriver::Remote::Capabilities)
546
- expect(desired_capabilities.browser_name).to eq 'chrome'
547
- end
548
-
549
- # 6.18 not implemented - does not build from Hash
550
- # 6.19 build from hash
551
- # 7.0 valid
552
- not_compliant_on :v6_18 do
553
- it 'browser name with url and http client Hash' do
554
- capabilities = Watir::Capabilities.new(:chrome,
555
- url: 'https://example.com/wd/hub',
556
- http_client: {read_timeout: 30})
557
- args = capabilities.to_args
558
- expect(args.first).to eq :remote
559
- expect(args.last[:http_client].instance_variable_get('@read_timeout')).to eq 30
560
- desired_capabilities = args.last[:desired_capabilities]
561
- expect(desired_capabilities).to be_a(Selenium::WebDriver::Remote::Capabilities)
562
- expect(desired_capabilities.browser_name).to eq 'chrome'
563
- end
214
+ actual_options = args.last[:capabilities]
215
+ expect(actual_options.browser_name).to eq 'chrome'
564
216
  end
565
217
 
566
- # 6.18 Broken
567
- # 6.19 do nothing; never worked
568
- # 7.0 remove
569
- xit 'remote keyword with url and options object' do
570
- capabilities = Watir::Capabilities.new(:remote,
218
+ it 'browser name with url and options object' do
219
+ capabilities = Watir::Capabilities.new(:chrome,
571
220
  url: 'https://example.com/wd/hub',
572
- options: Selenium::WebDriver::Chrome::Options.new)
221
+ options: Selenium::WebDriver::Chrome::Options.new(args: ['--foo']))
573
222
  args = capabilities.to_args
574
223
  expect(args.first).to eq :remote
575
- desired_capabilities = args.last[:desired_capabilities]
576
- expect(desired_capabilities).to be_a(Selenium::WebDriver::Remote::Capabilities)
577
- expect(desired_capabilities.browser_name).to eq 'chrome'
578
- end
579
-
580
- # 6.18 broken; options eaten
581
- # 6.19 fix
582
- # 7.0 valid
583
- not_compliant_on :v6_18 do
584
- it 'browser name with url and options object' do
585
- opts = {args: ['--foo']}
586
- capabilities = Watir::Capabilities.new(:chrome,
587
- url: 'https://example.com/wd/hub',
588
- options: Selenium::WebDriver::Chrome::Options.new(opts))
589
- args = capabilities.to_args
590
- expect(args.first).to eq :remote
591
- desired_capabilities = args.last[:desired_capabilities]
592
- expect(desired_capabilities).to be_a(Selenium::WebDriver::Remote::Capabilities)
593
- expect(desired_capabilities.browser_name).to eq 'chrome'
594
- options = args.last[:options]
595
- expect(options.args).to include('--foo')
596
- end
224
+ actual_options = args.last[:capabilities]
225
+ expect(actual_options.browser_name).to eq 'chrome'
226
+ expect(actual_options.args).to include('--foo')
597
227
  end
598
228
 
599
- # 6.18 not implemented - can't figure out options
600
- # 6.19 do nothing; never worked
601
- # 7.0 remove
602
- xit 'remote keyword with url and options hash' do
603
- capabilities = Watir::Capabilities.new(:remote,
229
+ it 'browser name with url and options hash' do
230
+ options = {prefs: {foo: 'bar'}}
231
+ capabilities = Watir::Capabilities.new(:chrome,
604
232
  url: 'http://example.com',
605
- options: {prefs: {foo: 'bar'}})
233
+ options: options)
606
234
  args = capabilities.to_args
607
235
  expect(args.first).to eq :remote
608
236
  expect(args.last[:url]).to eq 'http://example.com'
609
- options = args.last[:options]
610
- expect(options).to be_a(Selenium::WebDriver::Chrome::Options)
611
- end
612
-
613
- # 6.18 does not work; options got dropped
614
- # 6.19 fix
615
- # 7.0 valid
616
- not_compliant_on :v6_18 do
617
- it 'browser name with url and options hash' do
618
- options = {prefs: {foo: 'bar'}}
619
- capabilities = Watir::Capabilities.new(:chrome,
620
- url: 'http://example.com',
621
- options: options)
622
- args = capabilities.to_args
623
- expect(args.first).to eq :remote
624
- expect(args.last[:url]).to eq 'http://example.com'
625
- actual_options = args.last[:options]
626
- expect(actual_options).to be_a(Selenium::WebDriver::Chrome::Options)
627
- expect(actual_options.prefs).to eq(foo: 'bar')
628
- end
629
- end
630
-
631
- # 6.18 works
632
- # 6.19 deprecate :remote_keyword
633
- # 7.0 remove
634
- it 'remote keyword with url and capabilities' do
635
- expect {
636
- caps = Watir::Capabilities.new(:remote,
637
- url: 'https://example.com/wd/hub',
638
- capabilities_key => Selenium::WebDriver::Remote::Capabilities.chrome)
639
- args = caps.to_args
640
- expect(args.first).to eq :remote
641
- desired_capabilities = args.last[:desired_capabilities]
642
- expect(desired_capabilities).to be_a(Selenium::WebDriver::Remote::Capabilities)
643
- expect(desired_capabilities.browser_name).to eq 'chrome'
644
- }.to have_deprecated_remote_keyword # (and desired_capabilities)
237
+ actual_options = args.last[:capabilities]
238
+ expect(actual_options).to be_a(Selenium::WebDriver::Chrome::Options)
239
+ expect(actual_options.prefs).to eq(foo: 'bar')
645
240
  end
646
241
 
647
- # 6.18 works
648
- # 6.19 nothing
649
- # 7.0 valid
650
242
  it 'browser name with url and capabilities' do
651
243
  caps = Watir::Capabilities.new(:chrome,
652
244
  url: 'https://example.com/wd/hub',
653
- capabilities_key => Selenium::WebDriver::Remote::Capabilities.chrome)
245
+ capabilities: Selenium::WebDriver::Remote::Capabilities.chrome)
654
246
  args = caps.to_args
655
247
  expect(args.first).to eq :remote
656
- desired_capabilities = args.last[:desired_capabilities]
657
- expect(desired_capabilities).to be_a(Selenium::WebDriver::Remote::Capabilities)
658
- expect(desired_capabilities.browser_name).to eq 'chrome'
248
+ actual_capabilities = args.last[:capabilities]
249
+ expect(actual_capabilities).to be_a(Selenium::WebDriver::Remote::Capabilities)
250
+ expect(actual_capabilities.browser_name).to eq 'chrome'
659
251
  end
660
252
 
661
- # 6.18 works
662
- # 6.19 deprecate :remote_keyword
663
- # 7.0 remove
664
- it 'remote keyword with http client & capabilities' do
665
- expect {
666
- client = default_client.new
667
- caps = Watir::Capabilities.new(:remote,
668
- url: 'https://example.com/wd/hub',
669
- capabilities_key => Selenium::WebDriver::Remote::Capabilities.chrome,
670
- http_client: client)
671
-
672
- args = caps.to_args
673
- expect(args.first).to eq :remote
674
- expect(args.last[:http_client]).to eq client
675
- desired_capabilities = args.last[:desired_capabilities]
676
- expect(desired_capabilities).to be_a(Selenium::WebDriver::Remote::Capabilities)
677
- expect(desired_capabilities.browser_name).to eq 'chrome'
678
- }.to have_deprecated_remote_keyword # (and desired_capabilities)
679
- end
680
-
681
- # 6.18 works
682
- # 6.19 nothing
683
- # 7.0 valid
684
253
  it 'browser name with http client & capabilities' do
685
- client = default_client.new
254
+ client = Watir::HttpClient.new
686
255
  caps = Watir::Capabilities.new(:chrome,
687
256
  url: 'https://example.com/wd/hub',
688
- capabilities_key => Selenium::WebDriver::Remote::Capabilities.chrome,
257
+ capabilities: Selenium::WebDriver::Remote::Capabilities.chrome,
689
258
  http_client: client)
690
259
 
691
260
  args = caps.to_args
692
261
  expect(args.first).to eq :remote
693
262
  expect(args.last[:http_client]).to eq client
694
- desired_capabilities = args.last[:desired_capabilities]
695
- expect(desired_capabilities).to be_a(Selenium::WebDriver::Remote::Capabilities)
696
- expect(desired_capabilities.browser_name).to eq 'chrome'
263
+ actual_capabilities = args.last[:capabilities]
264
+ expect(actual_capabilities).to be_a(Selenium::WebDriver::Remote::Capabilities)
265
+ expect(actual_capabilities.browser_name).to eq 'chrome'
697
266
  end
698
267
 
699
- # 6.18 broken; options is eaten
700
- # 6.19 fix
701
- # 7.0 valid
702
- not_compliant_on :v6_18 do
703
- it 'browser name with http client & options object' do
704
- client = default_client.new
705
- opts = {prefs: {foo: 'bar'}}
706
- options = Selenium::WebDriver::Chrome::Options.new(opts)
707
- caps = Watir::Capabilities.new(:chrome,
708
- url: 'https://example.com/wd/hub',
709
- options: options,
710
- http_client: client)
711
-
712
- args = caps.to_args
713
- expect(args.first).to eq :remote
714
- expect(args.last[:http_client]).to eq client
715
- actual_options = args.last[:options]
716
- expect(actual_options).to be_a(Selenium::WebDriver::Chrome::Options)
717
- expect(actual_options.prefs).to eq(foo: 'bar')
718
- end
268
+ it 'browser name with http client & options object' do
269
+ client = Watir::HttpClient.new
270
+ options = Selenium::WebDriver::Chrome::Options.new(prefs: {foo: 'bar'})
271
+ caps = Watir::Capabilities.new(:chrome,
272
+ url: 'https://example.com/wd/hub',
273
+ options: options,
274
+ http_client: client)
275
+
276
+ args = caps.to_args
277
+ expect(args.first).to eq :remote
278
+ expect(args.last[:http_client]).to eq client
279
+ actual_options = args.last[:capabilities]
280
+ expect(actual_options).to be_a(Selenium::WebDriver::Chrome::Options)
281
+ expect(actual_options.prefs).to eq(foo: 'bar')
719
282
  end
720
283
 
721
- # 6.18 broken; options is eaten
722
- # 6.19 do nothing
723
- # 7.0 raise exception
724
- not_compliant_on :v6_18 do
725
- it 'browser name with options & capabilities' do
726
- options = {prefs: {foo: 'bar'}}
284
+ it 'browser name with options & capabilities' do
285
+ options = {prefs: {foo: 'bar'}}
727
286
 
728
- expect {
729
- @caps = Watir::Capabilities.new(:chrome,
730
- url: 'https://example.com/wd/hub',
731
- capabilities_key => Selenium::WebDriver::Remote::Capabilities.chrome,
732
- options: options)
733
- }.to have_deprecated_options_capabilities
734
-
735
- args = @caps.to_args
736
- expect(args.first).to eq :remote
737
- desired_capabilities = args.last[:desired_capabilities]
738
- expect(desired_capabilities).to be_a(Selenium::WebDriver::Remote::Capabilities)
739
- expect(desired_capabilities.browser_name).to eq 'chrome'
740
- actual_options = args.last[:options]
741
- expect(actual_options).to be_a(Selenium::WebDriver::Chrome::Options)
742
- expect(actual_options.prefs).to eq(foo: 'bar')
743
- end
287
+ expect {
288
+ Watir::Capabilities.new(:chrome,
289
+ url: 'https://example.com/wd/hub',
290
+ capabilities: Selenium::WebDriver::Remote::Capabilities.chrome,
291
+ options: options)
292
+ }.to raise_exception(ArgumentError, ':capabilities and :options are not both allowed')
744
293
  end
745
294
 
746
- # 6.18 broken - Selenium doesn't support "chromeOptions" in Capabilities. Did it even at one point?
747
- # 6.19 fix! allow to stay in top level
748
- # 7.0 valid
749
- not_compliant_on :v6_18 do
750
- it 'allows headless to be set in chrome' do
751
- capabilities = Watir::Capabilities.new(:chrome,
752
- headless: true,
753
- url: 'http://example.com')
754
- args = capabilities.to_args
755
- actual_options = args.last[:options]
756
- expect(actual_options.args).to include '--headless', '--disable-gpu'
757
- end
295
+ it 'allows headless to be set in chrome' do
296
+ capabilities = Watir::Capabilities.new(:chrome,
297
+ headless: true,
298
+ url: 'http://example.com')
299
+ args = capabilities.to_args
300
+ actual_options = args.last[:capabilities]
301
+ expect(actual_options.args).to include '--headless', '--disable-gpu'
758
302
  end
759
303
 
760
- # 6.18 works - Putting it straight into Desired Capabilities. Bold move Watir 6.6. Bold move.
761
- # 6.19 keep, but do this with Options instead of capabilities
762
- # 7.0 valid
763
304
  it 'allows headless to be set in firefox' do
764
305
  capabilities = Watir::Capabilities.new(:firefox,
765
306
  headless: true,
766
307
  url: 'http://example.com')
767
308
  args = capabilities.to_args
768
309
 
769
- compliant_on :v6_18 do
770
- actual_capabilities = args.last[:desired_capabilities]
771
- expect(actual_capabilities['moz:firefoxOptions']['args']).to include '--headless'
772
- end
773
-
774
- not_compliant_on :v6_18 do
775
- expect(args.last[:options].args).to include '--headless'
776
- end
777
- end
778
-
779
- # 6.18 works - Putting it into desired capabilities
780
- # 6.19 deprecate this, it should go under options
781
- # 7.0 remove
782
- it 'allows sending to Browser Service Provider top level' do
783
- expect {
784
- capabilities = Watir::Capabilities.new(:chrome,
785
- 'sauce:options' => {username: ENV['SAUCE_USERNAME'],
786
- access_key: ENV['SAUCE_ACCESS_KEY']},
787
- url: 'https://ondemand.us-west-1.saucelabs.com')
788
- args = capabilities.to_args
789
- actual_capabilities = args.last[:desired_capabilities]
790
- expect(actual_capabilities['sauce:options'].keys).to include :username, :access_key
791
- }.to have_deprecated_unknown_keyword
310
+ expect(args.last[:capabilities].args).to include '-headless'
792
311
  end
793
312
 
794
- # 6.18 broken; options class eats it
795
- # 6.19 Fix it
796
- # 7.0 valid
797
313
  it 'allows sending to Browser Service Provider via options' do
798
- not_compliant_on :v6_18 do
799
- capabilities = Watir::Capabilities.new(:chrome,
800
- options: {'sauce:options' => {username: ENV['SAUCE_USERNAME'],
801
- access_key: ENV['SAUCE_ACCESS_KEY']}},
802
- url: 'https://ondemand.us-west-1.saucelabs.com')
803
- args = capabilities.to_args
804
- actual_capabilities = args.last[:desired_capabilities]
805
- expect(actual_capabilities['sauce:options']&.keys).to include :username, :access_key
806
- end
807
- end
808
- end
809
-
810
- describe 'chrome' do
811
- # 6.18 never implemented
812
- # 6.19 implement
813
- # 7.0 valid
814
- not_compliant_on :v6_18 do
815
- it 'by default uses chrome, has client, options & capabilities' do
816
- capabilities = Watir::Capabilities.new
817
- args = capabilities.to_args
818
- expect(args.last[:http_client]).to be_a default_client
819
- expect(args.last[:options]).to be_a Selenium::WebDriver::Chrome::Options
820
- expect(args.last[:desired_capabilities]).to be_a(Selenium::WebDriver::Remote::Capabilities)
821
- expect(args.last).not_to include(:service)
822
- end
823
- end
824
-
825
- # 6.18 works - puts them at top level in selenium opts, which Selenium 3 can read
826
- # 6.19 deprecate - put inside :service keyword
827
- # 7.0 remove
828
- it 'creates when service driver opts specified' do
829
- halt_service(:chrome)
830
-
831
- expect {
832
- capabilities = Watir::Capabilities.new(:chrome,
833
- driver_opts: {verbose: true})
834
- @args = capabilities.to_args
835
- }.to have_deprecated_driver_opts_keyword
836
-
837
- compliant_on :v6_18 do
838
- expect(@args.last[:driver_opts]).to eq(verbose: true)
839
- end
840
-
841
- not_compliant_on :v6_18 do
842
- expect(@args.last[:service].instance_variable_get('@extra_args')).to eq ['--verbose']
843
- end
844
- end
845
-
846
- # 6.18 works
847
- # 6.19 deprecate --> put in options
848
- # 7.0 remove
849
- it 'places args by creating options' do
850
- expect {
851
- capabilities = Watir::Capabilities.new(:chrome,
852
- args: ['--foo'])
853
- args = capabilities.to_args
854
- actual_options = args.last[:options]
855
- expect(actual_options.args).to include '--foo'
856
- }.to have_deprecated_args_keyword
857
- end
858
-
859
- # 6.18 broken because assumes args is empty and overrides
860
- # 6.19 do nothing; never worked
861
- # 7.0 remove
862
- xit 'places args when paired with options Hash' do
863
314
  capabilities = Watir::Capabilities.new(:chrome,
864
- args: ['--foo'],
865
- options: {args: ['--bar']})
315
+ options: {'sauce:options': {username: ENV['SAUCE_USERNAME'],
316
+ access_key: ENV['SAUCE_ACCESS_KEY']}},
317
+ url: 'https://ondemand.us-west-1.saucelabs.com')
866
318
  args = capabilities.to_args
867
- actual_options = args.last[:options]
868
- expect(actual_options.args).to include '--foo', '--bar'
319
+ actual_options = args.last[:capabilities].instance_variable_get('@options')
320
+ expect(actual_options[:'sauce:options']).to include :username, :access_key
869
321
  end
322
+ end
870
323
 
871
- # 6.18 broken because assumes options is a Hash
872
- # 6.19 do nothing; never worked
873
- # 7.0 remove
874
- xit 'places args when paired with options object' do
875
- options = Selenium::WebDriver::Chrome::Options.new(args: ['--bar'])
876
- capabilities = Watir::Capabilities.new(:chrome,
877
- args: ['--foo'],
878
- options: options)
324
+ describe 'chrome' do
325
+ it 'by default uses chrome, has client, options, but not capabilities' do
326
+ capabilities = Watir::Capabilities.new
879
327
  args = capabilities.to_args
880
- actual_options = args.last[:options]
881
- expect(actual_options.args).to include '--foo', '--bar'
882
- end
883
-
884
- # 6.18 works
885
- # 6.19 deprecate --> no more "switches"
886
- # 7.0 remove
887
- it 'places switches as args by creating options' do
888
- expect {
889
- capabilities = Watir::Capabilities.new(:chrome,
890
- switches: ['--foo'])
891
- args = capabilities.to_args
892
- actual_options = args.last[:options]
893
- expect(actual_options.args).to include '--foo'
894
- }.to have_deprecated_switches_keyword
328
+ expect(args.last[:http_client]).to be_a Watir::HttpClient
329
+ expect(args.last[:capabilities]).to be_a Selenium::WebDriver::Chrome::Options
330
+ expect(args.last).not_to include(:service)
895
331
  end
896
332
 
897
- # 6.18 works
898
- # 6.19 allow to stay in top level
899
- # 7.0 valid
900
333
  it 'sets headless by creating options' do
901
334
  capabilities = Watir::Capabilities.new(:chrome, headless: true)
902
335
  args = capabilities.to_args
903
- actual_options = args.last[:options]
336
+ actual_options = args.last[:capabilities]
904
337
  expect(actual_options.args).to include '--headless', '--disable-gpu'
905
338
  end
906
339
 
907
- # 6.18 broken because assumes options is a Hash
908
- # 6.19 fix
909
- # 7.0 valid
910
- not_compliant_on :v6_18 do
911
- it 'sets headless in existing options class' do
912
- capabilities = Watir::Capabilities.new(:chrome,
913
- options: Selenium::WebDriver::Chrome::Options.new,
914
- headless: true)
915
- args = capabilities.to_args
916
- actual_options = args.last[:options]
917
- expect(actual_options.args).to include '--headless', '--disable-gpu'
918
- end
340
+ it 'sets headless in existing options class' do
341
+ capabilities = Watir::Capabilities.new(:chrome,
342
+ options: Selenium::WebDriver::Chrome::Options.new,
343
+ headless: true)
344
+ args = capabilities.to_args
345
+ actual_options = args.last[:capabilities]
346
+ expect(actual_options.args).to include '--headless', '--disable-gpu'
919
347
  end
920
348
 
921
- # 6.18 works
922
- # 6.19 allow to stay in top level
923
- # 7.0 valid
924
349
  it 'sets headless when existing options is a Hash' do
925
350
  options = {args: ['--foo']}
926
351
  capabilities = Watir::Capabilities.new(:chrome,
927
352
  options: options,
928
353
  headless: true)
929
354
  args = capabilities.to_args
930
- actual_options = args.last[:options]
355
+ actual_options = args.last[:capabilities]
931
356
  expect(actual_options.args).to include '--headless', '--disable-gpu', '--foo'
932
357
  end
933
358
 
934
- # 6.18 Working; Selenium correctly disappears any non-valid options
935
- # 6.19 Keep
936
- # 7.0 Valid
937
359
  it 'generates options from Hash' do
938
360
  options = {args: %w[--foo --bar]}
939
361
  capabilities = Watir::Capabilities.new(:chrome, options: options)
940
362
  args = capabilities.to_args
941
- actual_options = args.last[:options]
363
+ actual_options = args.last[:capabilities]
942
364
  expect(actual_options).to be_a Selenium::WebDriver::Chrome::Options
943
365
  expect(actual_options.args).to include '--foo', '--bar'
944
366
  end
945
367
 
946
- # 6.18 Never implemented
947
- # 6.19 Implement
948
- # 7.0 Valid
949
- not_compliant_on :v6_18 do
950
- it 'accepts browser and w3c capabilities in options Hash' do
951
- opts = {page_load_strategy: 'eager',
952
- args: %w[--foo --bar]}
953
- capabilities = Watir::Capabilities.new(:chrome,
954
- options: opts)
955
- args = capabilities.to_args
956
- actual_capabilities = args.last[:desired_capabilities]
957
- expect(actual_capabilities[:page_load_strategy]).to eq 'eager'
958
- actual_options = args.last[:options]
959
- expect(actual_options.args).to include '--foo', '--bar'
960
- end
368
+ it 'accepts browser and w3c capabilities in options Hash' do
369
+ opts = {page_load_strategy: 'eager',
370
+ args: %w[--foo --bar]}
371
+ capabilities = Watir::Capabilities.new(:chrome,
372
+ options: opts)
373
+ args = capabilities.to_args
374
+ actual_options = args.last[:capabilities]
375
+ expect(actual_options.page_load_strategy).to eq 'eager'
376
+ expect(actual_options.args).to include '--foo', '--bar'
961
377
  end
962
378
  end
963
379
 
964
380
  describe 'firefox' do
965
- # 6.18 works - puts them at top level in selenium opts, which Selenium 3 can read
966
- # 6.19 deprecate - put inside :service keyword
967
- # 7.0 remove
968
- it 'creates when service driver opts specified' do
969
- halt_service(:firefox)
970
-
971
- expect {
972
- capabilities = Watir::Capabilities.new(:firefox,
973
- driver_opts: {log: 'foo.log'})
974
- @args = capabilities.to_args
975
- }.to have_deprecated_driver_opts_keyword
976
-
977
- compliant_on :v6_18 do
978
- expect(@args.last[:driver_opts]).to eq(log: 'foo.log')
979
- end
980
-
981
- not_compliant_on :v6_18 do
982
- expect(@args.last[:service].instance_variable_get('@extra_args')).to include '--log=foo.log'
983
- end
984
- end
985
-
986
- # 6.18 Works; supposed to be deprecated already
987
- # 6.19 Fix deprecation
988
- # 7.0 Remove
989
- not_compliant_on :v6_18 do
990
- it 'puts Profile inside Options as object' do
991
- profile = Selenium::WebDriver::Firefox::Profile.new
992
- options = Selenium::WebDriver::Firefox::Options.new
993
-
994
- capabilities = Watir::Capabilities.new(:firefox, options: options, profile: profile)
995
- expect {
996
- actual_options = capabilities.to_args.last[:options]
997
- expect(actual_options.profile).to eq profile
998
- }.to have_deprecated_firefox_profile
999
- end
1000
- end
1001
-
1002
- # 6.18 Works; supposed to be deprecated already
1003
- # 6.19 Fix deprecation
1004
- # 7.0 Remove
1005
381
  it 'puts Profile inside Options as Hash' do
1006
382
  profile = Selenium::WebDriver::Firefox::Profile.new
1007
- options = {args: ['--foo']}
383
+ options = {args: ['--foo'], profile: profile}
1008
384
 
1009
- capabilities = Watir::Capabilities.new(:firefox, options: options, profile: profile)
385
+ capabilities = Watir::Capabilities.new(:firefox, options: options)
1010
386
 
1011
- expect {
1012
- actual_options = capabilities.to_args.last[:options]
1013
- expect(actual_options.args).to include '--foo'
1014
- expect(actual_options.profile).to eq profile
1015
- }.to have_deprecated_firefox_profile
387
+ actual_options = capabilities.to_args.last[:capabilities]
388
+ expect(actual_options.args).to include '--foo'
389
+ expect(actual_options.profile).to eq profile
1016
390
  end
1017
391
 
1018
- # 6.18 Works
1019
- # 6.19 Do nothing
1020
- # 7.0 Valid
1021
392
  it 'puts Profile inside Hash options' do
1022
393
  profile = Selenium::WebDriver::Firefox::Profile.new
1023
394
  options = {args: ['--foo'], profile: profile}
1024
395
 
1025
396
  capabilities = Watir::Capabilities.new(:firefox, options: options)
1026
397
 
1027
- actual_options = capabilities.to_args.last[:options]
398
+ actual_options = capabilities.to_args.last[:capabilities]
1028
399
  expect(actual_options.args).to include '--foo'
1029
400
  expect(actual_options.profile).to eq profile
1030
401
  end
1031
402
 
1032
- # 6.18 works
1033
- # 6.19 allow to stay in top level
1034
- # 7.0 valid
1035
403
  it 'sets headless by creating options' do
1036
404
  capabilities = Watir::Capabilities.new(:firefox, headless: true)
1037
405
  args = capabilities.to_args
1038
- actual_options = args.last[:options]
1039
- expect(actual_options.args).to include '--headless'
406
+ actual_options = args.last[:capabilities]
407
+ expect(actual_options.args).to include '-headless'
1040
408
  end
1041
409
 
1042
- # 6.18 broken; assumes options is a Hash
1043
- # 6.19 fix!
1044
- # 7.0 valid
1045
- not_compliant_on :v6_18 do
1046
- it 'sets headless in existing options class' do
1047
- capabilities = Watir::Capabilities.new(:firefox,
1048
- options: Selenium::WebDriver::Firefox::Options.new,
1049
- headless: true)
1050
- args = capabilities.to_args
1051
- actual_options = args.last[:options]
1052
- expect(actual_options.args).to include '--headless'
1053
- end
410
+ it 'sets headless in existing options class' do
411
+ capabilities = Watir::Capabilities.new(:firefox,
412
+ options: Selenium::WebDriver::Firefox::Options.new,
413
+ headless: true)
414
+ args = capabilities.to_args
415
+ actual_options = args.last[:capabilities]
416
+ expect(actual_options.args).to include '-headless'
1054
417
  end
1055
418
 
1056
- # 6.18 works
1057
- # 6.19 allow to stay in top level
1058
- # 7.0 valid
1059
419
  it 'sets headless when existing options is a Hash' do
1060
- options = {args: ['--foo']}
420
+ options = {args: ['-foo']}
1061
421
  capabilities = Watir::Capabilities.new(:firefox,
1062
422
  options: options,
1063
423
  headless: true)
1064
424
  args = capabilities.to_args
1065
- actual_options = args.last[:options]
1066
- expect(actual_options.args).to include '--headless', '--foo'
425
+ actual_options = args.last[:capabilities]
426
+ expect(actual_options.args).to include '-headless', '-foo'
1067
427
  end
1068
428
 
1069
- # 6.18 Working
1070
- # 6.19 Keep
1071
- # 7.0 Valid
1072
429
  it 'generates Options instance from Hash' do
1073
430
  options = {args: %w[--foo --bar]}
1074
431
  capabilities = Watir::Capabilities.new(:firefox, options: options)
1075
432
  args = capabilities.to_args
1076
- actual_options = args.last[:options]
433
+ actual_options = args.last[:capabilities]
1077
434
  expect(actual_options).to be_a Selenium::WebDriver::Firefox::Options
1078
435
  expect(actual_options.args).to include '--foo', '--bar'
1079
436
  end
1080
437
 
1081
- # 6.18 Never implemented
1082
- # 6.19 Implement
1083
- # 7.0 Valid
1084
- not_compliant_on :v6_18 do
1085
- it 'accepts browser and w3c capabilities in options Hash' do
1086
- opts = {page_load_strategy: 'eager',
1087
- args: %w[--foo --bar]}
1088
- capabilities = Watir::Capabilities.new(:firefox,
1089
- options: opts)
1090
- args = capabilities.to_args
1091
- actual_capabilities = args.last[:desired_capabilities]
1092
- expect(actual_capabilities[:page_load_strategy]).to eq 'eager'
1093
- actual_options = args.last[:options]
1094
- expect(actual_options.args).to include '--foo', '--bar'
1095
- end
438
+ it 'accepts browser and w3c capabilities in options Hash' do
439
+ opts = {page_load_strategy: 'eager',
440
+ args: %w[--foo --bar]}
441
+ capabilities = Watir::Capabilities.new(:firefox,
442
+ options: opts)
443
+ args = capabilities.to_args
444
+ actual_options = args.last[:capabilities]
445
+ expect(actual_options.args).to include '--foo', '--bar'
446
+ expect(actual_options.page_load_strategy).to eq 'eager'
1096
447
  end
1097
448
  end
1098
449
 
1099
450
  describe 'safari' do
1100
- # 6.18 works
1101
- # 6.19 do nothing
1102
- # 7.0 valid
1103
451
  it 'sets Technology Preview' do
1104
452
  halt_service(:safari)
1105
453
 
1106
454
  Watir::Capabilities.new(:safari, technology_preview: true).to_args
1107
455
 
1108
- expect(Selenium::WebDriver::Safari::Service.driver_path)
1109
- .to eq Selenium::WebDriver::Safari.technology_preview
456
+ expect(Selenium::WebDriver::Safari.technology_preview?).to eq true
1110
457
  end
1111
458
 
1112
- # 6.18 broken because doesn't handle generic Safari browser options
1113
- # 6.19 Fix
1114
- # 7.0 Valid
1115
- not_compliant_on :v6_18 do
1116
- it 'generates options from Hash' do
1117
- options = {automatic_inspection: true}
1118
- capabilities = Watir::Capabilities.new(:safari, options: options)
1119
- args = capabilities.to_args
1120
- actual_options = args.last[:options]
1121
- expect(actual_options).to be_a Selenium::WebDriver::Safari::Options
1122
- expect(actual_options.automatic_inspection).to eq true
1123
- end
459
+ it 'generates options from Hash' do
460
+ options = {automatic_inspection: true}
461
+ capabilities = Watir::Capabilities.new(:safari, options: options)
462
+ args = capabilities.to_args
463
+ actual_options = args.last[:capabilities]
464
+ expect(actual_options).to be_a Selenium::WebDriver::Safari::Options
465
+ expect(actual_options.automatic_inspection).to eq true
1124
466
  end
1125
467
 
1126
- # 6.18 Never implemented
1127
- # 6.19 Implement
1128
- # 7.0 Valid
1129
- not_compliant_on :v6_18 do
1130
- it 'accepts browser and w3c capabilities in options Hash' do
1131
- opts = {page_load_strategy: 'eager',
1132
- automatic_inspection: true}
1133
- capabilities = Watir::Capabilities.new(:safari,
1134
- options: opts)
1135
- args = capabilities.to_args
1136
- actual_capabilities = args.last[:desired_capabilities]
1137
- expect(actual_capabilities[:page_load_strategy]).to eq 'eager'
1138
- actual_options = args.last[:options]
1139
- expect(actual_options.automatic_inspection).to eq true
1140
- end
468
+ it 'accepts browser and w3c capabilities in options Hash' do
469
+ opts = {page_load_strategy: 'eager',
470
+ automatic_inspection: true}
471
+ capabilities = Watir::Capabilities.new(:safari,
472
+ options: opts)
473
+ args = capabilities.to_args
474
+ actual_options = args.last[:capabilities]
475
+ expect(actual_options.automatic_inspection).to eq true
476
+ expect(actual_options.page_load_strategy).to eq 'eager'
1141
477
  end
1142
478
  end
1143
479
 
1144
480
  describe 'ie' do
1145
- # 6.18 works - puts them at top level in selenium opts, which Selenium 3 can read
1146
- # 6.19 deprecate - put inside :service keyword
1147
- # 7.0 remove
1148
- it 'creates when service driver opts specified' do
1149
- halt_service(:ie)
1150
-
1151
- expect {
1152
- capabilities = Watir::Capabilities.new(:ie,
1153
- driver_opts: {silent: true})
1154
- @args = capabilities.to_args
1155
- }.to have_deprecated_driver_opts_keyword
1156
-
1157
- compliant_on :v6_18 do
1158
- expect(@args.last[:driver_opts]).to eq(silent: true)
1159
- end
1160
-
1161
- not_compliant_on :v6_18 do
1162
- expect(@args.last[:service].instance_variable_get('@extra_args')).to include '--silent'
1163
- end
1164
- end
1165
-
1166
- # 6.18 Working
1167
- # 6.19 Keep
1168
- # 7.0 Valid
1169
481
  it 'generates Options instance from Hash with args' do
1170
482
  options = {args: %w[--foo --bar]}
1171
483
  capabilities = Watir::Capabilities.new(:ie, options: options)
1172
484
  args = capabilities.to_args
1173
- actual_options = args.last[:options]
485
+ actual_options = args.last[:capabilities]
1174
486
  expect(actual_options).to be_a Selenium::WebDriver::IE::Options
1175
487
  expect(actual_options.args).to include '--foo', '--bar'
1176
488
  end
1177
489
 
1178
- # 6.18 Working
1179
- # 6.19 Keep
1180
- # 7.0 Valid
1181
490
  it 'generates Options instance from Hash with valid option' do
1182
491
  options = {browser_attach_timeout: true}
1183
492
  capabilities = Watir::Capabilities.new(:ie, options: options)
1184
493
  args = capabilities.to_args
1185
- actual_options = args.last[:options]
494
+ actual_options = args.last[:capabilities]
1186
495
  expect(actual_options).to be_a Selenium::WebDriver::IE::Options
1187
496
  expect(actual_options.options[:browser_attach_timeout]).to eq true
1188
497
  end
1189
498
 
1190
- # 6.18 broken; assumes options is a hash
1191
- # 6.19 Do nothing; never worked
1192
- # 7.0 Remove
1193
- xit 'adds args to existing options instance' do
1194
- args = %w[--foo --bar]
1195
- options = Selenium::WebDriver::IE::Options.new
1196
- capabilities = Watir::Capabilities.new(:ie, options: options, args: args)
1197
- args = capabilities.to_args
1198
- actual_options = args.last[:options]
1199
- expect(actual_options).to be_a Selenium::WebDriver::IE::Options
1200
- expect(actual_options.args).to include '--foo', '--bar'
1201
- end
1202
-
1203
- # 6.18 broken; overwrites args in options
1204
- # 6.19 do nothing; never worked
1205
- # 7.0 Remove
1206
- xit 'adds args to existing options hash' do
1207
- options = {args: ['--foo']}
1208
- capabilities = Watir::Capabilities.new(:ie, options: options, args: ['--bar'])
499
+ it 'accepts browser and w3c capabilities in options Hash' do
500
+ opts = {page_load_strategy: 'eager',
501
+ args: ['--foo']}
502
+ capabilities = Watir::Capabilities.new(:ie,
503
+ options: opts)
1209
504
  args = capabilities.to_args
1210
- actual_options = args.last[:options]
1211
- expect(actual_options).to be_a Selenium::WebDriver::IE::Options
1212
- expect(actual_options.args).to include '--foo', '--bar'
1213
- end
1214
-
1215
- # 6.18 Never implemented
1216
- # 6.19 Implement
1217
- # 7.0 Valid
1218
- not_compliant_on :v6_18 do
1219
- it 'accepts browser and w3c capabilities in options Hash' do
1220
- opts = {page_load_strategy: 'eager',
1221
- args: ['--foo']}
1222
- capabilities = Watir::Capabilities.new(:ie,
1223
- options: opts)
1224
- args = capabilities.to_args
1225
- actual_capabilities = args.last[:desired_capabilities]
1226
- expect(actual_capabilities[:page_load_strategy]).to eq 'eager'
1227
- actual_options = args.last[:options]
1228
- expect(actual_options.args).to include '--foo'
1229
- end
1230
- end
1231
-
1232
- # 6.18 Works
1233
- # 6.19 Deprecate
1234
- # 7.0 Remove
1235
- it 'adds args by itself' do
1236
- caps = Watir::Capabilities.new(:ie, args: %w[foo bar])
1237
- expect {
1238
- opts = caps.to_args.last[:options]
1239
- expect(opts.args).to eq Set.new(%w[foo bar])
1240
- }.to have_deprecated_args_keyword
505
+ actual_options = args.last[:capabilities]
506
+ expect(actual_options.args).to include '--foo'
507
+ expect(actual_options.page_load_strategy).to eq 'eager'
1241
508
  end
1242
509
  end
1243
510
  end