watir 7.1.0 → 7.2.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.
Files changed (253) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/chrome.yml +29 -16
  3. data/.github/workflows/edge.yml +19 -11
  4. data/.github/workflows/firefox.yml +28 -16
  5. data/.github/workflows/ie.yml +13 -7
  6. data/.github/workflows/safari.yml +22 -11
  7. data/.github/workflows/unit.yml +31 -23
  8. data/.rubocop.yml +14 -7
  9. data/.rubocop_todo.yml +0 -26
  10. data/CHANGES.md +16 -1
  11. data/Gemfile +6 -1
  12. data/README.md +15 -11
  13. data/Rakefile +9 -7
  14. data/lib/watir/adjacent.rb +3 -1
  15. data/lib/watir/after_hooks.rb +5 -3
  16. data/lib/watir/alert.rb +2 -0
  17. data/lib/watir/aliases.rb +2 -0
  18. data/lib/watir/attribute_helper.rb +4 -2
  19. data/lib/watir/browser.rb +10 -14
  20. data/lib/watir/capabilities.rb +56 -33
  21. data/lib/watir/cell_container.rb +2 -0
  22. data/lib/watir/container.rb +2 -0
  23. data/lib/watir/cookies.rb +5 -5
  24. data/lib/watir/element_collection.rb +3 -1
  25. data/lib/watir/elements/button.rb +2 -0
  26. data/lib/watir/elements/cell.rb +2 -0
  27. data/lib/watir/elements/checkbox.rb +2 -0
  28. data/lib/watir/elements/date_field.rb +2 -0
  29. data/lib/watir/elements/date_time_field.rb +2 -0
  30. data/lib/watir/elements/dlist.rb +3 -1
  31. data/lib/watir/elements/element.rb +29 -105
  32. data/lib/watir/elements/file_field.rb +2 -0
  33. data/lib/watir/elements/font.rb +2 -0
  34. data/lib/watir/elements/form.rb +2 -0
  35. data/lib/watir/elements/hidden.rb +2 -0
  36. data/lib/watir/elements/iframe.rb +2 -0
  37. data/lib/watir/elements/image.rb +2 -0
  38. data/lib/watir/elements/input.rb +2 -0
  39. data/lib/watir/elements/link.rb +2 -0
  40. data/lib/watir/elements/list.rb +2 -0
  41. data/lib/watir/elements/option.rb +2 -0
  42. data/lib/watir/elements/radio.rb +2 -0
  43. data/lib/watir/elements/row.rb +2 -0
  44. data/lib/watir/elements/select.rb +2 -0
  45. data/lib/watir/elements/table.rb +3 -1
  46. data/lib/watir/elements/table_cell.rb +2 -0
  47. data/lib/watir/elements/table_row.rb +2 -0
  48. data/lib/watir/elements/table_section.rb +2 -0
  49. data/lib/watir/elements/text_area.rb +2 -0
  50. data/lib/watir/elements/text_field.rb +2 -0
  51. data/lib/watir/exception.rb +2 -0
  52. data/lib/watir/extensions/nokogiri.rb +2 -0
  53. data/lib/watir/generator/base/generator.rb +2 -0
  54. data/lib/watir/generator/base/idl_sorter.rb +3 -1
  55. data/lib/watir/generator/base/spec_extractor.rb +6 -4
  56. data/lib/watir/generator/base/util.rb +2 -0
  57. data/lib/watir/generator/base/visitor.rb +5 -5
  58. data/lib/watir/generator/base.rb +2 -1
  59. data/lib/watir/generator/html/generator.rb +2 -0
  60. data/lib/watir/generator/html/spec_extractor.rb +2 -0
  61. data/lib/watir/generator/html/visitor.rb +2 -0
  62. data/lib/watir/generator/html.rb +2 -0
  63. data/lib/watir/generator/svg/generator.rb +2 -0
  64. data/lib/watir/generator/svg/spec_extractor.rb +2 -0
  65. data/lib/watir/generator/svg/visitor.rb +2 -0
  66. data/lib/watir/generator/svg.rb +2 -0
  67. data/lib/watir/generator.rb +2 -0
  68. data/lib/watir/has_window.rb +3 -1
  69. data/lib/watir/http_client.rb +2 -0
  70. data/lib/watir/js_execution.rb +2 -0
  71. data/lib/watir/js_snippets.rb +2 -0
  72. data/lib/watir/locators/anchor/selector_builder.rb +2 -0
  73. data/lib/watir/locators/button/matcher.rb +2 -0
  74. data/lib/watir/locators/button/selector_builder/xpath.rb +15 -19
  75. data/lib/watir/locators/button/selector_builder.rb +2 -0
  76. data/lib/watir/locators/cell/selector_builder/xpath.rb +2 -0
  77. data/lib/watir/locators/cell/selector_builder.rb +2 -0
  78. data/lib/watir/locators/element/locator.rb +2 -0
  79. data/lib/watir/locators/element/matcher.rb +2 -0
  80. data/lib/watir/locators/element/selector_builder/regexp_disassembler.rb +2 -0
  81. data/lib/watir/locators/element/selector_builder/xpath.rb +16 -15
  82. data/lib/watir/locators/element/selector_builder/xpath_support.rb +4 -2
  83. data/lib/watir/locators/element/selector_builder.rb +16 -6
  84. data/lib/watir/locators/option/matcher.rb +2 -0
  85. data/lib/watir/locators/option/selector_builder/xpath.rb +2 -0
  86. data/lib/watir/locators/option/selector_builder.rb +2 -0
  87. data/lib/watir/locators/row/selector_builder/xpath.rb +2 -0
  88. data/lib/watir/locators/row/selector_builder.rb +2 -0
  89. data/lib/watir/locators/text_area/selector_builder/xpath.rb +2 -0
  90. data/lib/watir/locators/text_area/selector_builder.rb +2 -0
  91. data/lib/watir/locators/text_field/matcher.rb +2 -0
  92. data/lib/watir/locators/text_field/selector_builder/xpath.rb +2 -0
  93. data/lib/watir/locators/text_field/selector_builder.rb +2 -0
  94. data/lib/watir/locators.rb +2 -0
  95. data/lib/watir/logger.rb +2 -0
  96. data/lib/watir/navigation.rb +3 -1
  97. data/lib/watir/radio_set.rb +2 -0
  98. data/lib/watir/row_container.rb +2 -0
  99. data/lib/watir/screenshot.rb +2 -0
  100. data/lib/watir/scroll.rb +27 -2
  101. data/lib/watir/search_context.rb +96 -0
  102. data/lib/watir/shadow_root.rb +60 -0
  103. data/lib/watir/user_editable.rb +3 -1
  104. data/lib/watir/version.rb +3 -1
  105. data/lib/watir/wait/timer.rb +3 -1
  106. data/lib/watir/wait.rb +5 -5
  107. data/lib/watir/window.rb +7 -3
  108. data/lib/watir/window_collection.rb +4 -1
  109. data/lib/watir.rb +4 -0
  110. data/lib/watirspec/guards.rb +2 -0
  111. data/lib/watirspec/implementation.rb +14 -10
  112. data/lib/watirspec/rake_tasks.rb +4 -4
  113. data/lib/watirspec/remote_server.rb +5 -3
  114. data/lib/watirspec/runner.rb +3 -1
  115. data/lib/watirspec/server/app.rb +2 -0
  116. data/lib/watirspec/server.rb +2 -0
  117. data/lib/watirspec.rb +7 -4
  118. data/spec/locator_spec_helper.rb +2 -0
  119. data/spec/spec_helper.rb +2 -0
  120. data/spec/unit/capabilities_spec.rb +77 -58
  121. data/spec/unit/element_locator_spec.rb +2 -0
  122. data/spec/unit/match_elements/button_spec.rb +2 -0
  123. data/spec/unit/match_elements/element_spec.rb +10 -8
  124. data/spec/unit/match_elements/text_field_spec.rb +2 -0
  125. data/spec/unit/selector_builder/anchor_spec.rb +2 -0
  126. data/spec/unit/selector_builder/button_spec.rb +31 -28
  127. data/spec/unit/selector_builder/cell_spec.rb +3 -1
  128. data/spec/unit/selector_builder/element_spec.rb +61 -60
  129. data/spec/unit/selector_builder/row_spec.rb +21 -10
  130. data/spec/unit/selector_builder/text_field_spec.rb +29 -21
  131. data/spec/unit/selector_builder/textarea_spec.rb +2 -0
  132. data/spec/unit/unit_helper.rb +2 -0
  133. data/spec/unit/wait_spec.rb +2 -0
  134. data/spec/watirspec/adjacent_spec.rb +8 -6
  135. data/spec/watirspec/after_hooks_spec.rb +19 -21
  136. data/spec/watirspec/alert_spec.rb +2 -0
  137. data/spec/watirspec/attributes_spec.rb +2 -0
  138. data/spec/watirspec/browser_spec.rb +16 -12
  139. data/spec/watirspec/capabilities_spec.rb +569 -0
  140. data/spec/watirspec/cookies_spec.rb +4 -2
  141. data/spec/watirspec/drag_and_drop_spec.rb +2 -0
  142. data/spec/watirspec/element_hidden_spec.rb +2 -0
  143. data/spec/watirspec/elements/area_spec.rb +2 -0
  144. data/spec/watirspec/elements/areas_spec.rb +2 -0
  145. data/spec/watirspec/elements/button_spec.rb +2 -0
  146. data/spec/watirspec/elements/buttons_spec.rb +2 -0
  147. data/spec/watirspec/elements/checkbox_spec.rb +2 -0
  148. data/spec/watirspec/elements/checkboxes_spec.rb +2 -0
  149. data/spec/watirspec/elements/collections_spec.rb +5 -3
  150. data/spec/watirspec/elements/date_field_spec.rb +2 -0
  151. data/spec/watirspec/elements/date_fields_spec.rb +2 -0
  152. data/spec/watirspec/elements/date_time_field_spec.rb +2 -0
  153. data/spec/watirspec/elements/date_time_fields_spec.rb +2 -0
  154. data/spec/watirspec/elements/dd_spec.rb +2 -0
  155. data/spec/watirspec/elements/dds_spec.rb +2 -0
  156. data/spec/watirspec/elements/del_spec.rb +2 -0
  157. data/spec/watirspec/elements/dels_spec.rb +2 -0
  158. data/spec/watirspec/elements/div_spec.rb +2 -1
  159. data/spec/watirspec/elements/divs_spec.rb +2 -0
  160. data/spec/watirspec/elements/dl_spec.rb +6 -6
  161. data/spec/watirspec/elements/dls_spec.rb +2 -0
  162. data/spec/watirspec/elements/dt_spec.rb +2 -0
  163. data/spec/watirspec/elements/dts_spec.rb +2 -0
  164. data/spec/watirspec/elements/element_spec.rb +9 -1
  165. data/spec/watirspec/elements/elements_spec.rb +2 -0
  166. data/spec/watirspec/elements/em_spec.rb +2 -0
  167. data/spec/watirspec/elements/ems_spec.rb +2 -0
  168. data/spec/watirspec/elements/filefield_spec.rb +2 -0
  169. data/spec/watirspec/elements/filefields_spec.rb +2 -0
  170. data/spec/watirspec/elements/font_spec.rb +2 -0
  171. data/spec/watirspec/elements/form_spec.rb +2 -0
  172. data/spec/watirspec/elements/forms_spec.rb +2 -0
  173. data/spec/watirspec/elements/frame_spec.rb +2 -0
  174. data/spec/watirspec/elements/frames_spec.rb +2 -0
  175. data/spec/watirspec/elements/hidden_spec.rb +2 -0
  176. data/spec/watirspec/elements/hiddens_spec.rb +2 -0
  177. data/spec/watirspec/elements/hn_spec.rb +2 -0
  178. data/spec/watirspec/elements/hns_spec.rb +2 -0
  179. data/spec/watirspec/elements/iframe_spec.rb +3 -1
  180. data/spec/watirspec/elements/iframes_spec.rb +2 -0
  181. data/spec/watirspec/elements/image_spec.rb +2 -0
  182. data/spec/watirspec/elements/images_spec.rb +2 -0
  183. data/spec/watirspec/elements/input_spec.rb +2 -0
  184. data/spec/watirspec/elements/ins_spec.rb +2 -0
  185. data/spec/watirspec/elements/inses_spec.rb +2 -0
  186. data/spec/watirspec/elements/label_spec.rb +2 -0
  187. data/spec/watirspec/elements/labels_spec.rb +2 -0
  188. data/spec/watirspec/elements/li_spec.rb +2 -0
  189. data/spec/watirspec/elements/link_spec.rb +4 -4
  190. data/spec/watirspec/elements/links_spec.rb +2 -0
  191. data/spec/watirspec/elements/lis_spec.rb +2 -0
  192. data/spec/watirspec/elements/list_spec.rb +2 -0
  193. data/spec/watirspec/elements/map_spec.rb +2 -0
  194. data/spec/watirspec/elements/maps_spec.rb +2 -0
  195. data/spec/watirspec/elements/meta_spec.rb +2 -0
  196. data/spec/watirspec/elements/metas_spec.rb +2 -0
  197. data/spec/watirspec/elements/ol_spec.rb +2 -0
  198. data/spec/watirspec/elements/ols_spec.rb +2 -0
  199. data/spec/watirspec/elements/option_spec.rb +2 -0
  200. data/spec/watirspec/elements/p_spec.rb +2 -0
  201. data/spec/watirspec/elements/pre_spec.rb +2 -0
  202. data/spec/watirspec/elements/pres_spec.rb +2 -0
  203. data/spec/watirspec/elements/ps_spec.rb +2 -0
  204. data/spec/watirspec/elements/radio_spec.rb +2 -0
  205. data/spec/watirspec/elements/radios_spec.rb +2 -0
  206. data/spec/watirspec/elements/select_list_spec.rb +7 -1
  207. data/spec/watirspec/elements/select_lists_spec.rb +2 -0
  208. data/spec/watirspec/elements/span_spec.rb +2 -0
  209. data/spec/watirspec/elements/spans_spec.rb +2 -0
  210. data/spec/watirspec/elements/strong_spec.rb +2 -0
  211. data/spec/watirspec/elements/strongs_spec.rb +2 -0
  212. data/spec/watirspec/elements/table_nesting_spec.rb +2 -0
  213. data/spec/watirspec/elements/table_spec.rb +2 -0
  214. data/spec/watirspec/elements/tables_spec.rb +2 -0
  215. data/spec/watirspec/elements/tbody_spec.rb +2 -0
  216. data/spec/watirspec/elements/tbodys_spec.rb +2 -0
  217. data/spec/watirspec/elements/td_spec.rb +2 -0
  218. data/spec/watirspec/elements/tds_spec.rb +2 -0
  219. data/spec/watirspec/elements/text_field_spec.rb +2 -0
  220. data/spec/watirspec/elements/text_fields_spec.rb +2 -0
  221. data/spec/watirspec/elements/textarea_spec.rb +2 -0
  222. data/spec/watirspec/elements/textareas_spec.rb +2 -0
  223. data/spec/watirspec/elements/tfoot_spec.rb +2 -0
  224. data/spec/watirspec/elements/tfoots_spec.rb +2 -0
  225. data/spec/watirspec/elements/thead_spec.rb +2 -0
  226. data/spec/watirspec/elements/theads_spec.rb +2 -0
  227. data/spec/watirspec/elements/tr_spec.rb +2 -0
  228. data/spec/watirspec/elements/trs_spec.rb +2 -0
  229. data/spec/watirspec/elements/ul_spec.rb +2 -0
  230. data/spec/watirspec/elements/uls_spec.rb +2 -0
  231. data/spec/watirspec/html/child_frame.html +29 -0
  232. data/spec/watirspec/html/class_locator.html +2 -0
  233. data/spec/watirspec/html/scroll_nested.html +17 -0
  234. data/spec/watirspec/html/scroll_nested_offscreen.html +18 -0
  235. data/spec/watirspec/html/shadow_dom.html +28 -0
  236. data/spec/watirspec/radio_set_spec.rb +2 -0
  237. data/spec/watirspec/screenshot_spec.rb +4 -2
  238. data/spec/watirspec/scroll_spec.rb +75 -7
  239. data/spec/watirspec/shadow_root_spec.rb +103 -0
  240. data/spec/watirspec/special_chars_spec.rb +2 -0
  241. data/spec/watirspec/support/rspec_matchers.rb +35 -32
  242. data/spec/watirspec/user_editable_spec.rb +2 -0
  243. data/spec/watirspec/wait_spec.rb +2 -0
  244. data/spec/watirspec/window_switching_spec.rb +48 -38
  245. data/spec/watirspec_helper.rb +24 -18
  246. data/support/doctest_helper.rb +2 -0
  247. data/support/version_differ.rb +2 -0
  248. data/watir.gemspec +11 -8
  249. metadata +54 -215
  250. data/.github/actions/enable-safari/action.yml +0 -11
  251. data/.github/actions/install-chrome/action.yml +0 -12
  252. data/.github/actions/setup-linux/action.yml +0 -8
  253. data/lib/watir-webdriver.rb +0 -2
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'unit_helper'
2
4
 
3
5
  describe Watir::Capabilities do
@@ -49,25 +51,35 @@ describe Watir::Capabilities do
49
51
 
50
52
  args = capabilities.to_args
51
53
  expect(args.last[:http_client]).to be_a Watir::HttpClient
52
- expect(args.last[:capabilities].first).to be_a options_class(browser_symbol)
54
+ expect(args.last[:options]).to be_a options_class(browser_symbol)
53
55
  expect(args.last).not_to include(:service)
54
56
  end
55
57
 
58
+ it 'errors with url and service' do
59
+ expect {
60
+ Watir::Capabilities.new(browser_symbol,
61
+ service: instance_double(Selenium::WebDriver::Service),
62
+ url: 'https://example.com/wd/hub/')
63
+ }.to raise_exception(ArgumentError, ':url and :service are not both allowed')
64
+ end
65
+
56
66
  it 'just options has client & options but not capabilities or service' do
57
67
  capabilities = Watir::Capabilities.new(options: options_class(browser_symbol).new)
58
68
 
59
69
  args = capabilities.to_args
60
70
 
61
71
  expect(args.last[:http_client]).to be_a Watir::HttpClient
62
- expect(args.last[:capabilities].first).to be_a options_class(browser_symbol)
72
+ expect(args.last[:options]).to be_a options_class(browser_symbol)
63
73
  expect(args.last).not_to include(:service)
64
74
  end
65
75
 
66
76
  it 'just capabilities has client & capabilities but not service' do
67
77
  caps = Selenium::WebDriver::Remote::Capabilities.send(browser_symbol)
68
78
  capabilities = Watir::Capabilities.new(capabilities: caps)
69
-
70
- args = capabilities.to_args
79
+ args = []
80
+ expect {
81
+ args = capabilities.to_args
82
+ }.to have_deprecated(:capabilities)
71
83
 
72
84
  expect(args.last[:http_client]).to be_a Watir::HttpClient
73
85
  expect(args.last[:capabilities]).to be_a(Selenium::WebDriver::Remote::Capabilities)
@@ -84,7 +96,7 @@ describe Watir::Capabilities do
84
96
  args = capabilities.to_args
85
97
  expect(args.first).to eq browser_symbol
86
98
  actual_service = args.last[:service]
87
- expect(actual_service.instance_variable_get('@port')).to eq 1234
99
+ expect(actual_service.instance_variable_get(:@port)).to eq 1234
88
100
  end
89
101
 
90
102
  it 'builds service from a Hash' do
@@ -95,9 +107,9 @@ describe Watir::Capabilities do
95
107
  args = capabilities.to_args
96
108
  expect(args.first).to eq browser_symbol
97
109
  actual_service = args.last[:service]
98
- expect(actual_service.instance_variable_get('@port')).to eq 1234
99
- expect(actual_service.instance_variable_get('@executable_path')).to eq '/path/to/driver'
100
- expect(actual_service.instance_variable_get('@extra_args')).to include '--foo', '--bar'
110
+ expect(actual_service.instance_variable_get(:@port)).to eq 1234
111
+ expect(actual_service.instance_variable_get(:@executable_path)).to eq '/path/to/driver'
112
+ expect(actual_service.instance_variable_get(:@extra_args)).to include '--foo', '--bar'
101
113
  end
102
114
 
103
115
  it 'is a bad argument to service' do
@@ -127,8 +139,8 @@ describe Watir::Capabilities do
127
139
  args = capabilities.to_args
128
140
  actual_client = args.last[:http_client]
129
141
  expect(actual_client).to be_a Watir::HttpClient
130
- expect(actual_client.instance_variable_get('@read_timeout')).to eq 10
131
- expect(actual_client.instance_variable_get('@open_timeout')).to eq 10
142
+ expect(actual_client.instance_variable_get(:@read_timeout)).to eq 10
143
+ expect(actual_client.instance_variable_get(:@open_timeout)).to eq 10
132
144
  end
133
145
 
134
146
  it 'raises an exception if :client receives something other than Hash or Client object' do
@@ -160,7 +172,7 @@ describe Watir::Capabilities do
160
172
  script_timeout: 12}
161
173
  capabilities = Watir::Capabilities.new(browser_symbol, options: options)
162
174
  args = capabilities.to_args
163
- actual_options = args.last[:capabilities].first
175
+ actual_options = args.last[:options]
164
176
  expect(actual_options.timeouts[:page_load]).to eq 11_000
165
177
  expect(actual_options.timeouts[:script]).to eq 12_000
166
178
  end
@@ -168,10 +180,9 @@ describe Watir::Capabilities do
168
180
  it 'has deprecated timeouts key with page load warning' do
169
181
  options = {timeouts: {page_load: 11}}
170
182
  capabilities = Watir::Capabilities.new(browser_symbol, options: options)
171
- msg = 'timeouts has been deprecated, use page_load_timeout (in seconds) directly instead'
172
183
  expect {
173
184
  capabilities.to_args
174
- }.to have_deprecated_timeouts(msg)
185
+ }.to have_deprecated(:timeouts)
175
186
  end
176
187
 
177
188
  it 'has deprecated timeouts key with script warning' do
@@ -179,7 +190,7 @@ describe Watir::Capabilities do
179
190
  expect {
180
191
  capabilities = Watir::Capabilities.new(browser_symbol, options: options)
181
192
  capabilities.to_args
182
- }.to have_deprecated_timeouts('timeouts has been deprecated, use script_timeout (in seconds) directly instead')
193
+ }.to have_deprecated(:timeouts)
183
194
  end
184
195
 
185
196
  it 'does not allow implicit wait timeout in timeouts hash' do
@@ -194,14 +205,14 @@ describe Watir::Capabilities do
194
205
  it 'unhandled prompt behavior defaults to ignore' do
195
206
  capabilities = Watir::Capabilities.new(browser_symbol)
196
207
  args = capabilities.to_args
197
- actual_options = args.last[:capabilities].first
208
+ actual_options = args.last[:options]
198
209
  expect(actual_options.unhandled_prompt_behavior).to eq :ignore
199
210
  end
200
211
 
201
212
  it 'unhandled prompt behavior can be overridden' do
202
213
  capabilities = Watir::Capabilities.new(browser_symbol, options: {unhandled_prompt_behavior: :accept_and_notify})
203
214
  args = capabilities.to_args
204
- actual_options = args.last[:capabilities].first
215
+ actual_options = args.last[:options]
205
216
  expect(actual_options.unhandled_prompt_behavior).to eq :accept_and_notify
206
217
  end
207
218
 
@@ -210,7 +221,7 @@ describe Watir::Capabilities do
210
221
  proxy = Selenium::WebDriver::Proxy.new(http: '127.0.0.1:8080', ssl: '127.0.0.1:443')
211
222
  capabilities = Watir::Capabilities.new(browser_symbol, proxy: proxy)
212
223
  args = capabilities.to_args
213
- proxy = args.last[:capabilities].first.proxy
224
+ proxy = args.last[:options].proxy
214
225
 
215
226
  expect(proxy).to be_a Selenium::WebDriver::Proxy
216
227
  expect(proxy.type).to eq(:manual)
@@ -222,7 +233,7 @@ describe Watir::Capabilities do
222
233
  proxy = {http: '127.0.0.1:8080', ssl: '127.0.0.1:443'}
223
234
  capabilities = Watir::Capabilities.new(browser_symbol, proxy: proxy)
224
235
  args = capabilities.to_args
225
- proxy = args.last[:capabilities].first.proxy
236
+ proxy = args.last[:options].proxy
226
237
 
227
238
  expect(proxy).to be_a Selenium::WebDriver::Proxy
228
239
  expect(proxy.type).to eq(:manual)
@@ -237,7 +248,7 @@ describe Watir::Capabilities do
237
248
 
238
249
  capabilities = Watir::Capabilities.new(browser_symbol, options: options, proxy: proxy)
239
250
  args = capabilities.to_args
240
- actual_options = args.last[:capabilities].first
251
+ actual_options = args.last[:options]
241
252
 
242
253
  expect(actual_options.proxy).to be_a Selenium::WebDriver::Proxy
243
254
  expect(actual_options.proxy.type).to eq(:manual)
@@ -277,7 +288,7 @@ describe Watir::Capabilities do
277
288
  capabilities = Watir::Capabilities.new(url: 'http://example.com')
278
289
  args = capabilities.to_args
279
290
  expect(args.first).to eq :remote
280
- actual_options = args.last[:capabilities].first
291
+ actual_options = args.last[:options]
281
292
  expect(actual_options.browser_name).to eq 'chrome'
282
293
  end
283
294
 
@@ -289,7 +300,7 @@ describe Watir::Capabilities do
289
300
  expect(args.last[:url]).to eq 'https://example.com/wd/hub/'
290
301
  expect(args.last[:http_client]).to be_a Watir::HttpClient
291
302
 
292
- expect(args.last[:capabilities].first).to be_a Selenium::WebDriver::Firefox::Options
303
+ expect(args.last[:options]).to be_a Selenium::WebDriver::Firefox::Options
293
304
  expect(args.last).not_to include(:service)
294
305
  end
295
306
 
@@ -310,7 +321,7 @@ describe Watir::Capabilities do
310
321
  args = capabilities.to_args
311
322
  expect(args.first).to eq :remote
312
323
  expect(args.last[:http_client]).to eq client
313
- actual_options = args.last[:capabilities].first
324
+ actual_options = args.last[:options]
314
325
  expect(actual_options.browser_name).to eq 'chrome'
315
326
  end
316
327
 
@@ -320,8 +331,8 @@ describe Watir::Capabilities do
320
331
  http_client: {read_timeout: 30})
321
332
  args = capabilities.to_args
322
333
  expect(args.first).to eq :remote
323
- expect(args.last[:http_client].instance_variable_get('@read_timeout')).to eq 30
324
- actual_options = args.last[:capabilities].first
334
+ expect(args.last[:http_client].instance_variable_get(:@read_timeout)).to eq 30
335
+ actual_options = args.last[:options]
325
336
  expect(actual_options.browser_name).to eq 'chrome'
326
337
  end
327
338
 
@@ -332,7 +343,7 @@ describe Watir::Capabilities do
332
343
  proxy: proxy)
333
344
  args = capabilities.to_args
334
345
  expect(args.first).to eq :remote
335
- proxy = args.last[:capabilities].first.proxy
346
+ proxy = args.last[:options].proxy
336
347
  expect(proxy).to be_a Selenium::WebDriver::Proxy
337
348
  expect(proxy.type).to eq(:manual)
338
349
  expect(proxy.http).to eq('127.0.0.1:8080')
@@ -346,7 +357,7 @@ describe Watir::Capabilities do
346
357
  proxy: proxy)
347
358
  args = capabilities.to_args
348
359
  expect(args.first).to eq :remote
349
- proxy = args.last[:capabilities].first.proxy
360
+ proxy = args.last[:options].proxy
350
361
  expect(proxy).to be_a Selenium::WebDriver::Proxy
351
362
  expect(proxy.type).to eq(:manual)
352
363
  expect(proxy.http).to eq('127.0.0.1:8080')
@@ -359,7 +370,7 @@ describe Watir::Capabilities do
359
370
  options: Selenium::WebDriver::Chrome::Options.new(args: ['--foo']))
360
371
  args = capabilities.to_args
361
372
  expect(args.first).to eq :remote
362
- actual_options = args.last[:capabilities].first
373
+ actual_options = args.last[:options]
363
374
  expect(actual_options.browser_name).to eq 'chrome'
364
375
  expect(actual_options.args).to include('--foo')
365
376
  end
@@ -372,7 +383,7 @@ describe Watir::Capabilities do
372
383
  args = capabilities.to_args
373
384
  expect(args.first).to eq :remote
374
385
  expect(args.last[:url]).to eq 'http://example.com'
375
- actual_options = args.last[:capabilities].first
386
+ actual_options = args.last[:options]
376
387
  expect(actual_options).to be_a(Selenium::WebDriver::Chrome::Options)
377
388
  expect(actual_options.prefs).to eq(foo: 'bar')
378
389
  end
@@ -381,7 +392,11 @@ describe Watir::Capabilities do
381
392
  caps = Watir::Capabilities.new(:chrome,
382
393
  url: 'https://example.com/wd/hub',
383
394
  capabilities: Selenium::WebDriver::Remote::Capabilities.chrome)
384
- args = caps.to_args
395
+ args = []
396
+ expect {
397
+ args = caps.to_args
398
+ }.to have_deprecated(:capabilities)
399
+
385
400
  expect(args.first).to eq :remote
386
401
  actual_capabilities = args.last[:capabilities]
387
402
  expect(actual_capabilities).to be_a(Selenium::WebDriver::Remote::Capabilities)
@@ -394,8 +409,11 @@ describe Watir::Capabilities do
394
409
  url: 'https://example.com/wd/hub',
395
410
  capabilities: Selenium::WebDriver::Remote::Capabilities.chrome,
396
411
  http_client: client)
412
+ args = []
413
+ expect {
414
+ args = caps.to_args
415
+ }.to have_deprecated(:capabilities)
397
416
 
398
- args = caps.to_args
399
417
  expect(args.first).to eq :remote
400
418
  expect(args.last[:http_client]).to eq client
401
419
  actual_capabilities = args.last[:capabilities]
@@ -416,10 +434,10 @@ describe Watir::Capabilities do
416
434
  args = caps.to_args
417
435
  expect(args.first).to eq :remote
418
436
  expect(args.last[:http_client]).to eq client
419
- actual_options = args.last[:capabilities].first
437
+ actual_options = args.last[:options]
420
438
  expect(actual_options).to be_a(Selenium::WebDriver::Chrome::Options)
421
439
  expect(actual_options.prefs).to eq(foo: 'bar')
422
- proxy = args.last[:capabilities].first.proxy
440
+ proxy = args.last[:options].proxy
423
441
  expect(proxy).to be_a Selenium::WebDriver::Proxy
424
442
  expect(proxy.type).to eq(:manual)
425
443
  expect(proxy.http).to eq('127.0.0.1:8080')
@@ -442,7 +460,7 @@ describe Watir::Capabilities do
442
460
  headless: true,
443
461
  url: 'http://example.com')
444
462
  args = capabilities.to_args
445
- actual_options = args.last[:capabilities].first
463
+ actual_options = args.last[:options]
446
464
  expect(actual_options.args).to include '--headless', '--disable-gpu'
447
465
  end
448
466
 
@@ -452,22 +470,23 @@ describe Watir::Capabilities do
452
470
  url: 'http://example.com')
453
471
  args = capabilities.to_args
454
472
 
455
- expect(args.last[:capabilities].first.args).to include '-headless'
473
+ expect(args.last[:options].args).to include '-headless'
456
474
  end
457
475
 
458
476
  it 'supports multiple vendor capabilities' do
459
- sauce_options = {'sauce:options': {username: ENV['SAUCE_USERNAME'],
460
- access_key: ENV['SAUCE_ACCESS_KEY']}}
477
+ sauce_options = {'sauce:options': {username: ENV.fetch('SAUCE_USERNAME', nil),
478
+ access_key: ENV.fetch('SAUCE_ACCESS_KEY', nil)}}
461
479
  other_options = {'other:options': {foo: 'bar'}}
462
480
 
463
481
  capabilities = Watir::Capabilities.new(:chrome,
464
482
  options: sauce_options.merge(other_options),
465
483
  url: 'https://ondemand.us-west-1.saucelabs.com')
466
484
 
467
- se_caps = capabilities.to_args.last[:capabilities]
468
- expect(se_caps).to include(Selenium::WebDriver::Chrome::Options.new(unhandled_prompt_behavior: :ignore))
469
- expect(se_caps).to include(Selenium::WebDriver::Remote::Capabilities.new(sauce_options))
470
- expect(se_caps).to include(Selenium::WebDriver::Remote::Capabilities.new(other_options))
485
+ generated_options = capabilities.to_args.last[:options]
486
+ expect(generated_options).to be_a(Selenium::WebDriver::Chrome::Options)
487
+ expect(generated_options.unhandled_prompt_behavior).to eq :ignore
488
+ expect(generated_options.instance_variable_get(:@options)[:'sauce:options']).to eq sauce_options[:'sauce:options']
489
+ expect(generated_options.instance_variable_get(:@options)[:'other:options']).to eq other_options[:'other:options']
471
490
  end
472
491
  end
473
492
 
@@ -476,14 +495,14 @@ describe Watir::Capabilities do
476
495
  capabilities = Watir::Capabilities.new
477
496
  args = capabilities.to_args
478
497
  expect(args.last[:http_client]).to be_a Watir::HttpClient
479
- expect(args.last[:capabilities].first).to be_a Selenium::WebDriver::Chrome::Options
498
+ expect(args.last[:options]).to be_a Selenium::WebDriver::Chrome::Options
480
499
  expect(args.last).not_to include(:service)
481
500
  end
482
501
 
483
502
  it 'sets headless by creating options' do
484
503
  capabilities = Watir::Capabilities.new(:chrome, headless: true)
485
504
  args = capabilities.to_args
486
- actual_options = args.last[:capabilities].first
505
+ actual_options = args.last[:options]
487
506
  expect(actual_options.args).to include '--headless', '--disable-gpu'
488
507
  end
489
508
 
@@ -492,7 +511,7 @@ describe Watir::Capabilities do
492
511
  options: Selenium::WebDriver::Chrome::Options.new,
493
512
  headless: true)
494
513
  args = capabilities.to_args
495
- actual_options = args.last[:capabilities].first
514
+ actual_options = args.last[:options]
496
515
  expect(actual_options.args).to include '--headless', '--disable-gpu'
497
516
  end
498
517
 
@@ -502,7 +521,7 @@ describe Watir::Capabilities do
502
521
  options: options,
503
522
  headless: true)
504
523
  args = capabilities.to_args
505
- actual_options = args.last[:capabilities].first
524
+ actual_options = args.last[:options]
506
525
  expect(actual_options.args).to include '--headless', '--disable-gpu', '--foo'
507
526
  end
508
527
 
@@ -510,7 +529,7 @@ describe Watir::Capabilities do
510
529
  options = {args: %w[--foo --bar]}
511
530
  capabilities = Watir::Capabilities.new(:chrome, options: options)
512
531
  args = capabilities.to_args
513
- actual_options = args.last[:capabilities].first
532
+ actual_options = args.last[:options]
514
533
  expect(actual_options).to be_a Selenium::WebDriver::Chrome::Options
515
534
  expect(actual_options.args).to include '--foo', '--bar'
516
535
  end
@@ -521,7 +540,7 @@ describe Watir::Capabilities do
521
540
  capabilities = Watir::Capabilities.new(:chrome,
522
541
  options: opts)
523
542
  args = capabilities.to_args
524
- actual_options = args.last[:capabilities].first
543
+ actual_options = args.last[:options]
525
544
  expect(actual_options.page_load_strategy).to eq 'eager'
526
545
  expect(actual_options.args).to include '--foo', '--bar'
527
546
  end
@@ -534,7 +553,7 @@ describe Watir::Capabilities do
534
553
 
535
554
  capabilities = Watir::Capabilities.new(:firefox, options: options)
536
555
 
537
- actual_options = capabilities.to_args.last[:capabilities].first
556
+ actual_options = capabilities.to_args.last[:options]
538
557
  expect(actual_options.args).to include '--foo'
539
558
  expect(actual_options.profile).to eq profile
540
559
  end
@@ -545,7 +564,7 @@ describe Watir::Capabilities do
545
564
 
546
565
  capabilities = Watir::Capabilities.new(:firefox, options: options)
547
566
 
548
- actual_options = capabilities.to_args.last[:capabilities].first
567
+ actual_options = capabilities.to_args.last[:options]
549
568
  expect(actual_options.args).to include '--foo'
550
569
  expect(actual_options.profile).to eq profile
551
570
  end
@@ -553,7 +572,7 @@ describe Watir::Capabilities do
553
572
  it 'sets headless by creating options' do
554
573
  capabilities = Watir::Capabilities.new(:firefox, headless: true)
555
574
  args = capabilities.to_args
556
- actual_options = args.last[:capabilities].first
575
+ actual_options = args.last[:options]
557
576
  expect(actual_options.args).to include '-headless'
558
577
  end
559
578
 
@@ -562,7 +581,7 @@ describe Watir::Capabilities do
562
581
  options: Selenium::WebDriver::Firefox::Options.new,
563
582
  headless: true)
564
583
  args = capabilities.to_args
565
- actual_options = args.last[:capabilities].first
584
+ actual_options = args.last[:options]
566
585
  expect(actual_options.args).to include '-headless'
567
586
  end
568
587
 
@@ -572,7 +591,7 @@ describe Watir::Capabilities do
572
591
  options: options,
573
592
  headless: true)
574
593
  args = capabilities.to_args
575
- actual_options = args.last[:capabilities].first
594
+ actual_options = args.last[:options]
576
595
  expect(actual_options.args).to include '-headless', '-foo'
577
596
  end
578
597
 
@@ -580,7 +599,7 @@ describe Watir::Capabilities do
580
599
  options = {args: %w[--foo --bar]}
581
600
  capabilities = Watir::Capabilities.new(:firefox, options: options)
582
601
  args = capabilities.to_args
583
- actual_options = args.last[:capabilities].first
602
+ actual_options = args.last[:options]
584
603
  expect(actual_options).to be_a Selenium::WebDriver::Firefox::Options
585
604
  expect(actual_options.args).to include '--foo', '--bar'
586
605
  end
@@ -591,7 +610,7 @@ describe Watir::Capabilities do
591
610
  capabilities = Watir::Capabilities.new(:firefox,
592
611
  options: opts)
593
612
  args = capabilities.to_args
594
- actual_options = args.last[:capabilities].first
613
+ actual_options = args.last[:options]
595
614
  expect(actual_options.args).to include '--foo', '--bar'
596
615
  expect(actual_options.page_load_strategy).to eq 'eager'
597
616
  end
@@ -610,7 +629,7 @@ describe Watir::Capabilities do
610
629
  options = {automatic_inspection: true}
611
630
  capabilities = Watir::Capabilities.new(:safari, options: options)
612
631
  args = capabilities.to_args
613
- actual_options = args.last[:capabilities].first
632
+ actual_options = args.last[:options]
614
633
  expect(actual_options).to be_a Selenium::WebDriver::Safari::Options
615
634
  expect(actual_options.automatic_inspection).to eq true
616
635
  end
@@ -621,7 +640,7 @@ describe Watir::Capabilities do
621
640
  capabilities = Watir::Capabilities.new(:safari,
622
641
  options: opts)
623
642
  args = capabilities.to_args
624
- actual_options = args.last[:capabilities].first
643
+ actual_options = args.last[:options]
625
644
  expect(actual_options.automatic_inspection).to eq true
626
645
  expect(actual_options.page_load_strategy).to eq 'eager'
627
646
  end
@@ -632,7 +651,7 @@ describe Watir::Capabilities do
632
651
  options = {args: %w[--foo --bar]}
633
652
  capabilities = Watir::Capabilities.new(:ie, options: options)
634
653
  args = capabilities.to_args
635
- actual_options = args.last[:capabilities].first
654
+ actual_options = args.last[:options]
636
655
  expect(actual_options).to be_a Selenium::WebDriver::IE::Options
637
656
  expect(actual_options.args).to include '--foo', '--bar'
638
657
  end
@@ -641,7 +660,7 @@ describe Watir::Capabilities do
641
660
  options = {browser_attach_timeout: true}
642
661
  capabilities = Watir::Capabilities.new(:ie, options: options)
643
662
  args = capabilities.to_args
644
- actual_options = args.last[:capabilities].first
663
+ actual_options = args.last[:options]
645
664
  expect(actual_options).to be_a Selenium::WebDriver::IE::Options
646
665
  expect(actual_options.options[:browser_attach_timeout]).to eq true
647
666
  end
@@ -652,7 +671,7 @@ describe Watir::Capabilities do
652
671
  capabilities = Watir::Capabilities.new(:ie,
653
672
  options: opts)
654
673
  args = capabilities.to_args
655
- actual_options = args.last[:capabilities].first
674
+ actual_options = args.last[:options]
656
675
  expect(actual_options.args).to include '--foo'
657
676
  expect(actual_options.page_load_strategy).to eq 'eager'
658
677
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'unit_helper'
2
4
 
3
5
  describe Watir::Locators::Element::Locator do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../unit_helper'
2
4
 
3
5
  describe Watir::Locators::Button::Matcher do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../unit_helper'
2
4
 
3
5
  describe Watir::Locators::Element::Matcher do
@@ -182,16 +184,16 @@ describe Watir::Locators::Element::Matcher do
182
184
  end
183
185
 
184
186
  it 'by visibility true' do
185
- elements = [wd_element(tag_name: 'div', "displayed?": false),
186
- wd_element(tag_name: 'span', "displayed?": true)]
187
+ elements = [wd_element(tag_name: 'div', displayed?: false),
188
+ wd_element(tag_name: 'span', displayed?: true)]
187
189
  @values_to_match = {visible: true}
188
190
 
189
191
  expect(matcher.match(elements, values_to_match, @filter)).to eq elements[1]
190
192
  end
191
193
 
192
194
  it 'by visibility false' do
193
- elements = [wd_element(tag_name: 'div', "displayed?": true),
194
- wd_element(tag_name: 'span', "displayed?": false)]
195
+ elements = [wd_element(tag_name: 'div', displayed?: true),
196
+ wd_element(tag_name: 'span', displayed?: false)]
195
197
  @values_to_match = {visible: false}
196
198
 
197
199
  expect(matcher.match(elements, values_to_match, @filter)).to eq elements[1]
@@ -287,9 +289,9 @@ describe Watir::Locators::Element::Matcher do
287
289
  end
288
290
 
289
291
  it 'by visibility false' do
290
- elements = [wd_element("displayed?": false),
291
- wd_element("displayed?": true),
292
- wd_element("displayed?": false)]
292
+ elements = [wd_element(displayed?: false),
293
+ wd_element(displayed?: true),
294
+ wd_element(displayed?: false)]
293
295
  @values_to_match = {visible: false}
294
296
 
295
297
  expect(matcher.match(elements, values_to_match, @filter)).to eq [elements[0], elements[2]]
@@ -416,7 +418,7 @@ describe Watir::Locators::Element::Matcher do
416
418
  expect(matcher.match(elements, values_to_match, filter)).to eq nil
417
419
  end
418
420
 
419
- # Note: This will work after:text_regexp deprecation removed
421
+ # NOTE: This will work after:text_regexp deprecation removed
420
422
  it 'keeps element from being located' do
421
423
  @values_to_match = {text: /some visible some hidden/}
422
424
  allow(browser).to receive(:execute_script).and_return('all visible', 'some visible')
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../unit_helper'
2
4
 
3
5
  describe Watir::Locators::TextField::Matcher do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../unit_helper'
2
4
 
3
5
  describe Watir::Locators::Anchor::SelectorBuilder do