watir 6.13.0 → 6.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (223) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +141 -0
  3. data/.travis.yml +6 -0
  4. data/CHANGES.md +12 -0
  5. data/Gemfile +4 -10
  6. data/README.md +64 -49
  7. data/Rakefile +28 -16
  8. data/lib/watir.rb +13 -15
  9. data/lib/watir/adjacent.rb +15 -13
  10. data/lib/watir/after_hooks.rb +8 -10
  11. data/lib/watir/alert.rb +7 -8
  12. data/lib/watir/aliases.rb +2 -2
  13. data/lib/watir/attribute_helper.rb +18 -20
  14. data/lib/watir/browser.rb +42 -75
  15. data/lib/watir/capabilities.rb +19 -10
  16. data/lib/watir/cell_container.rb +0 -2
  17. data/lib/watir/container.rb +4 -4
  18. data/lib/watir/cookies.rb +7 -8
  19. data/lib/watir/element_collection.rb +37 -22
  20. data/lib/watir/elements/area.rb +0 -2
  21. data/lib/watir/elements/button.rb +1 -3
  22. data/lib/watir/elements/cell.rb +0 -1
  23. data/lib/watir/elements/checkbox.rb +5 -7
  24. data/lib/watir/elements/date_field.rb +5 -9
  25. data/lib/watir/elements/date_time_field.rb +6 -10
  26. data/lib/watir/elements/dlist.rb +2 -4
  27. data/lib/watir/elements/element.rb +201 -99
  28. data/lib/watir/elements/file_field.rb +3 -4
  29. data/lib/watir/elements/font.rb +2 -4
  30. data/lib/watir/elements/form.rb +0 -2
  31. data/lib/watir/elements/hidden.rb +3 -4
  32. data/lib/watir/elements/html_elements.rb +24 -76
  33. data/lib/watir/elements/iframe.rb +57 -71
  34. data/lib/watir/elements/image.rb +3 -4
  35. data/lib/watir/elements/input.rb +0 -2
  36. data/lib/watir/elements/link.rb +2 -5
  37. data/lib/watir/elements/list.rb +4 -4
  38. data/lib/watir/elements/option.rb +3 -6
  39. data/lib/watir/elements/radio.rb +4 -6
  40. data/lib/watir/elements/row.rb +0 -1
  41. data/lib/watir/elements/select.rb +41 -43
  42. data/lib/watir/elements/svg_elements.rb +0 -116
  43. data/lib/watir/elements/table.rb +1 -2
  44. data/lib/watir/elements/table_cell.rb +2 -3
  45. data/lib/watir/elements/text_field.rb +4 -6
  46. data/lib/watir/exception.rb +0 -1
  47. data/lib/watir/extensions/nokogiri.rb +2 -4
  48. data/lib/watir/generator.rb +3 -3
  49. data/lib/watir/generator/base.rb +10 -10
  50. data/lib/watir/generator/base/generator.rb +26 -29
  51. data/lib/watir/generator/base/idl_sorter.rb +34 -32
  52. data/lib/watir/generator/base/spec_extractor.rb +132 -114
  53. data/lib/watir/generator/base/util.rb +1 -3
  54. data/lib/watir/generator/base/visitor.rb +140 -140
  55. data/lib/watir/generator/html.rb +4 -4
  56. data/lib/watir/generator/html/generator.rb +2 -4
  57. data/lib/watir/generator/html/spec_extractor.rb +33 -33
  58. data/lib/watir/generator/html/visitor.rb +14 -14
  59. data/lib/watir/generator/svg.rb +3 -3
  60. data/lib/watir/generator/svg/generator.rb +1 -3
  61. data/lib/watir/generator/svg/spec_extractor.rb +35 -35
  62. data/lib/watir/generator/svg/visitor.rb +14 -14
  63. data/lib/watir/has_window.rb +2 -4
  64. data/lib/watir/js_execution.rb +7 -9
  65. data/lib/watir/js_snippets.rb +3 -3
  66. data/lib/watir/js_snippets/attributeValues.js +11 -0
  67. data/lib/watir/legacy_wait.rb +7 -12
  68. data/lib/watir/locators.rb +9 -11
  69. data/lib/watir/locators/button/locator.rb +2 -3
  70. data/lib/watir/locators/button/selector_builder.rb +9 -9
  71. data/lib/watir/locators/button/selector_builder/xpath.rb +1 -1
  72. data/lib/watir/locators/button/validator.rb +2 -2
  73. data/lib/watir/locators/cell/locator.rb +0 -2
  74. data/lib/watir/locators/cell/selector_builder.rb +3 -5
  75. data/lib/watir/locators/element/locator.rb +85 -64
  76. data/lib/watir/locators/element/selector_builder.rb +40 -38
  77. data/lib/watir/locators/element/selector_builder/xpath.rb +20 -18
  78. data/lib/watir/locators/element/validator.rb +1 -1
  79. data/lib/watir/locators/row/locator.rb +0 -2
  80. data/lib/watir/locators/row/selector_builder.rb +6 -9
  81. data/lib/watir/locators/text_area/selector_builder.rb +1 -1
  82. data/lib/watir/locators/text_field/locator.rb +1 -3
  83. data/lib/watir/locators/text_field/selector_builder.rb +5 -5
  84. data/lib/watir/locators/text_field/selector_builder/xpath.rb +1 -1
  85. data/lib/watir/locators/text_field/validator.rb +3 -2
  86. data/lib/watir/logger.rb +11 -21
  87. data/lib/watir/navigation.rb +49 -0
  88. data/lib/watir/radio_set.rb +17 -18
  89. data/lib/watir/row_container.rb +3 -5
  90. data/lib/watir/screenshot.rb +2 -4
  91. data/lib/watir/user_editable.rb +13 -8
  92. data/lib/watir/version.rb +3 -0
  93. data/lib/watir/wait.rb +56 -55
  94. data/lib/watir/wait/timer.rb +1 -3
  95. data/lib/watir/window.rb +36 -45
  96. data/lib/watir/xpath_support.rb +1 -3
  97. data/lib/watirspec.rb +11 -11
  98. data/lib/watirspec/guards.rb +10 -7
  99. data/lib/watirspec/implementation.rb +3 -4
  100. data/lib/watirspec/rake_tasks.rb +30 -29
  101. data/lib/watirspec/remote_server.rb +3 -3
  102. data/lib/watirspec/runner.rb +1 -2
  103. data/lib/watirspec/server.rb +3 -0
  104. data/lib/watirspec/server/app.rb +14 -6
  105. data/spec/implementation_spec.rb +9 -9
  106. data/spec/locator_spec_helper.rb +3 -4
  107. data/spec/spec_helper.rb +3 -7
  108. data/spec/unit/container_spec.rb +9 -10
  109. data/spec/unit/element_locator_spec.rb +224 -219
  110. data/spec/unit/logger_spec.rb +4 -4
  111. data/spec/unit/unit_helper.rb +0 -2
  112. data/spec/unit/wait_spec.rb +26 -28
  113. data/spec/watirspec/adjacent_spec.rb +130 -130
  114. data/spec/watirspec/after_hooks_spec.rb +63 -63
  115. data/spec/watirspec/alert_spec.rb +6 -6
  116. data/spec/watirspec/attributes_spec.rb +6 -6
  117. data/spec/watirspec/browser_spec.rb +161 -162
  118. data/spec/watirspec/click_spec.rb +9 -9
  119. data/spec/watirspec/cookies_spec.rb +15 -14
  120. data/spec/watirspec/drag_and_drop_spec.rb +15 -16
  121. data/spec/watirspec/element_hidden_spec.rb +19 -21
  122. data/spec/watirspec/elements/area_spec.rb +18 -21
  123. data/spec/watirspec/elements/areas_spec.rb +13 -15
  124. data/spec/watirspec/elements/button_spec.rb +96 -99
  125. data/spec/watirspec/elements/buttons_spec.rb +17 -19
  126. data/spec/watirspec/elements/checkbox_spec.rb +102 -100
  127. data/spec/watirspec/elements/checkboxes_spec.rb +13 -15
  128. data/spec/watirspec/elements/collections_spec.rb +35 -37
  129. data/spec/watirspec/elements/date_field_spec.rb +46 -47
  130. data/spec/watirspec/elements/date_fields_spec.rb +13 -15
  131. data/spec/watirspec/elements/date_time_field_spec.rb +62 -57
  132. data/spec/watirspec/elements/date_time_fields_spec.rb +14 -15
  133. data/spec/watirspec/elements/dd_spec.rb +46 -48
  134. data/spec/watirspec/elements/dds_spec.rb +13 -15
  135. data/spec/watirspec/elements/del_spec.rb +27 -28
  136. data/spec/watirspec/elements/dels_spec.rb +13 -15
  137. data/spec/watirspec/elements/div_spec.rb +89 -91
  138. data/spec/watirspec/elements/divs_spec.rb +17 -19
  139. data/spec/watirspec/elements/dl_spec.rb +52 -54
  140. data/spec/watirspec/elements/dls_spec.rb +13 -15
  141. data/spec/watirspec/elements/dt_spec.rb +46 -48
  142. data/spec/watirspec/elements/dts_spec.rb +13 -15
  143. data/spec/watirspec/elements/element_spec.rb +240 -189
  144. data/spec/watirspec/elements/elements_spec.rb +16 -16
  145. data/spec/watirspec/elements/em_spec.rb +38 -40
  146. data/spec/watirspec/elements/ems_spec.rb +13 -15
  147. data/spec/watirspec/elements/filefield_spec.rb +45 -46
  148. data/spec/watirspec/elements/filefields_spec.rb +13 -15
  149. data/spec/watirspec/elements/font_spec.rb +11 -13
  150. data/spec/watirspec/elements/form_spec.rb +13 -15
  151. data/spec/watirspec/elements/forms_spec.rb +13 -15
  152. data/spec/watirspec/elements/frame_spec.rb +48 -50
  153. data/spec/watirspec/elements/frames_spec.rb +13 -15
  154. data/spec/watirspec/elements/hidden_spec.rb +23 -25
  155. data/spec/watirspec/elements/hiddens_spec.rb +13 -15
  156. data/spec/watirspec/elements/hn_spec.rb +22 -24
  157. data/spec/watirspec/elements/hns_spec.rb +13 -13
  158. data/spec/watirspec/elements/iframe_spec.rb +106 -74
  159. data/spec/watirspec/elements/iframes_spec.rb +16 -18
  160. data/spec/watirspec/elements/image_spec.rb +30 -32
  161. data/spec/watirspec/elements/images_spec.rb +13 -15
  162. data/spec/watirspec/elements/input_spec.rb +4 -5
  163. data/spec/watirspec/elements/ins_spec.rb +27 -29
  164. data/spec/watirspec/elements/inses_spec.rb +13 -15
  165. data/spec/watirspec/elements/label_spec.rb +17 -19
  166. data/spec/watirspec/elements/labels_spec.rb +13 -15
  167. data/spec/watirspec/elements/li_spec.rb +23 -25
  168. data/spec/watirspec/elements/link_spec.rb +45 -48
  169. data/spec/watirspec/elements/links_spec.rb +14 -16
  170. data/spec/watirspec/elements/lis_spec.rb +13 -15
  171. data/spec/watirspec/elements/list_spec.rb +14 -15
  172. data/spec/watirspec/elements/map_spec.rb +19 -20
  173. data/spec/watirspec/elements/maps_spec.rb +13 -15
  174. data/spec/watirspec/elements/meta_spec.rb +10 -10
  175. data/spec/watirspec/elements/metas_spec.rb +13 -15
  176. data/spec/watirspec/elements/ol_spec.rb +20 -21
  177. data/spec/watirspec/elements/ols_spec.rb +13 -15
  178. data/spec/watirspec/elements/option_spec.rb +63 -63
  179. data/spec/watirspec/elements/p_spec.rb +27 -26
  180. data/spec/watirspec/elements/pre_spec.rb +24 -25
  181. data/spec/watirspec/elements/pres_spec.rb +13 -15
  182. data/spec/watirspec/elements/ps_spec.rb +13 -15
  183. data/spec/watirspec/elements/radio_spec.rb +96 -97
  184. data/spec/watirspec/elements/radios_spec.rb +13 -15
  185. data/spec/watirspec/elements/select_list_spec.rb +244 -237
  186. data/spec/watirspec/elements/select_lists_spec.rb +15 -16
  187. data/spec/watirspec/elements/span_spec.rb +32 -31
  188. data/spec/watirspec/elements/spans_spec.rb +13 -15
  189. data/spec/watirspec/elements/strong_spec.rb +23 -24
  190. data/spec/watirspec/elements/strongs_spec.rb +13 -15
  191. data/spec/watirspec/elements/table_nesting_spec.rb +15 -14
  192. data/spec/watirspec/elements/table_spec.rb +61 -62
  193. data/spec/watirspec/elements/tables_spec.rb +15 -17
  194. data/spec/watirspec/elements/tbody_spec.rb +25 -26
  195. data/spec/watirspec/elements/tbodys_spec.rb +17 -19
  196. data/spec/watirspec/elements/td_spec.rb +20 -22
  197. data/spec/watirspec/elements/tds_spec.rb +9 -11
  198. data/spec/watirspec/elements/text_field_spec.rb +55 -56
  199. data/spec/watirspec/elements/text_fields_spec.rb +15 -16
  200. data/spec/watirspec/elements/textarea_spec.rb +2 -2
  201. data/spec/watirspec/elements/textareas_spec.rb +1 -1
  202. data/spec/watirspec/elements/tfoot_spec.rb +22 -23
  203. data/spec/watirspec/elements/tfoots_spec.rb +19 -19
  204. data/spec/watirspec/elements/thead_spec.rb +21 -23
  205. data/spec/watirspec/elements/theads_spec.rb +19 -19
  206. data/spec/watirspec/elements/tr_spec.rb +20 -22
  207. data/spec/watirspec/elements/trs_spec.rb +17 -19
  208. data/spec/watirspec/elements/ul_spec.rb +17 -19
  209. data/spec/watirspec/elements/uls_spec.rb +13 -14
  210. data/spec/watirspec/html/data_attributes.html +1 -0
  211. data/spec/watirspec/radio_set_spec.rb +100 -99
  212. data/spec/watirspec/relaxed_locate_spec.rb +19 -43
  213. data/spec/watirspec/screenshot_spec.rb +4 -4
  214. data/spec/watirspec/special_chars_spec.rb +2 -4
  215. data/spec/watirspec/support/rspec_matchers.rb +85 -22
  216. data/spec/watirspec/user_editable_spec.rb +84 -85
  217. data/spec/watirspec/wait_spec.rb +74 -95
  218. data/spec/watirspec/window_switching_spec.rb +131 -132
  219. data/spec/watirspec_helper.rb +12 -9
  220. data/support/travis.sh +4 -0
  221. data/support/version_differ.rb +12 -13
  222. data/watir.gemspec +29 -22
  223. metadata +76 -50
@@ -1,6 +1,5 @@
1
1
  module Watir
2
2
  class FileField < Input
3
-
4
3
  #
5
4
  # Set the file field to the given path
6
5
  #
@@ -10,6 +9,7 @@ module Watir
10
9
 
11
10
  def set(path)
12
11
  raise Errno::ENOENT, path unless File.exist?(path)
12
+
13
13
  self.value = path
14
14
  end
15
15
 
@@ -23,16 +23,15 @@ module Watir
23
23
  path = path.gsub(File::SEPARATOR, File::ALT_SEPARATOR) if File::ALT_SEPARATOR
24
24
  element_call { @element.send_keys path }
25
25
  end
26
-
27
26
  end # FileField
28
27
 
29
28
  module Container
30
29
  def file_field(*args)
31
- FileField.new(self, extract_selector(args).merge(tag_name: "input", type: "file"))
30
+ FileField.new(self, extract_selector(args).merge(tag_name: 'input', type: 'file'))
32
31
  end
33
32
 
34
33
  def file_fields(*args)
35
- FileFieldCollection.new(self, extract_selector(args).merge(tag_name: "input", type: "file"))
34
+ FileFieldCollection.new(self, extract_selector(args).merge(tag_name: 'input', type: 'file'))
36
35
  end
37
36
  end # Container
38
37
 
@@ -1,6 +1,5 @@
1
1
  module Watir
2
2
  class Font < HTMLElement
3
-
4
3
  #
5
4
  # size of font
6
5
  #
@@ -10,16 +9,15 @@ module Watir
10
9
  def size
11
10
  attribute_value(:size)
12
11
  end
13
-
14
12
  end # Font
15
13
 
16
14
  module Container
17
15
  def font(*args)
18
- Font.new(self, extract_selector(args).merge(tag_name: "font"))
16
+ Font.new(self, extract_selector(args).merge(tag_name: 'font'))
19
17
  end
20
18
 
21
19
  def fonts(*args)
22
- FontCollection.new(self, extract_selector(args).merge(tag_name: "font"))
20
+ FontCollection.new(self, extract_selector(args).merge(tag_name: 'font'))
23
21
  end
24
22
  end # Container
25
23
  end # Watir
@@ -1,6 +1,5 @@
1
1
  module Watir
2
2
  class Form < HTMLElement
3
-
4
3
  #
5
4
  # Submits the form.
6
5
  #
@@ -11,6 +10,5 @@ module Watir
11
10
  element_call(:wait_for_present) { @element.submit }
12
11
  browser.after_hooks.run
13
12
  end
14
-
15
13
  end # Form
16
14
  end # Watir
@@ -5,18 +5,17 @@ module Watir
5
5
  end
6
6
 
7
7
  def click
8
- raise Watir::Exception::ObjectDisabledException, "click is not available on the hidden field element"
8
+ raise Watir::Exception::ObjectDisabledException, 'click is not available on the hidden field element'
9
9
  end
10
-
11
10
  end
12
11
 
13
12
  module Container
14
13
  def hidden(*args)
15
- Hidden.new(self, extract_selector(args).merge(tag_name: "input", type: "hidden"))
14
+ Hidden.new(self, extract_selector(args).merge(tag_name: 'input', type: 'hidden'))
16
15
  end
17
16
 
18
17
  def hiddens(*args)
19
- HiddenCollection.new(self, extract_selector(args).merge(tag_name: "input", type: "hidden"))
18
+ HiddenCollection.new(self, extract_selector(args).merge(tag_name: 'input', type: 'hidden'))
20
19
  end
21
20
  end # Container
22
21
 
@@ -10,9 +10,8 @@ module Watir
10
10
  attribute(Integer, :tabindex, :tabIndex)
11
11
  attribute(String, :accesskey, :accessKey)
12
12
  attribute("Boolean", :draggable?, :draggable)
13
- attribute(String, :dropzone, :dropzone)
14
- attribute(String, :contextmenu, :contextMenu)
15
13
  attribute("Boolean", :spellcheck?, :spellcheck)
14
+ attribute(String, :innertext, :innerText)
16
15
  attribute(String, :onabort, :onabort)
17
16
  attribute(String, :onblur, :onblur)
18
17
  attribute(String, :oncancel, :oncancel)
@@ -21,7 +20,6 @@ module Watir
21
20
  attribute(String, :onchange, :onchange)
22
21
  attribute(String, :onclick, :onclick)
23
22
  attribute(String, :onclose, :onclose)
24
- attribute(String, :oncontextmenu, :oncontextmenu)
25
23
  attribute(String, :oncuechange, :oncuechange)
26
24
  attribute(String, :ondblclick, :ondblclick)
27
25
  attribute(String, :ondrag, :ondrag)
@@ -172,24 +170,11 @@ module Watir
172
170
  class ScriptCollection < ElementCollection
173
171
  end
174
172
 
175
- class MenuItem < HTMLElement
176
- attribute(String, :type, :type)
177
- attribute(String, :label, :label)
178
- attribute(String, :icon, :icon)
179
- attribute("Boolean", :disabled?, :disabled)
180
- attribute("Boolean", :checked?, :checked)
181
- attribute(String, :radiogroup, :radiogroup)
182
- attribute("Boolean", :default?, :default)
183
- end
184
- class MenuItemCollection < ElementCollection
185
- end
186
-
187
- class Menu < HTMLElement
188
- attribute(String, :type, :type)
189
- attribute(String, :label, :label)
190
- attribute("Boolean", :compact?, :compact)
173
+ class Dialog < HTMLElement
174
+ attribute("Boolean", :open?, :open)
175
+ attribute(String, :returnvalue, :returnValue)
191
176
  end
192
- class MenuCollection < ElementCollection
177
+ class DialogCollection < ElementCollection
193
178
  end
194
179
 
195
180
  class Details < HTMLElement
@@ -253,22 +238,6 @@ module Watir
253
238
  class OutputCollection < ElementCollection
254
239
  end
255
240
 
256
- class Keygen < HTMLElement
257
- attribute("Boolean", :autofocus?, :autofocus)
258
- attribute(String, :challenge, :challenge)
259
- attribute("Boolean", :disabled?, :disabled)
260
- attribute(String, :form, :form)
261
- attribute(String, :keytype, :keytype)
262
- attribute(String, :name, :name)
263
- attribute(String, :type, :type)
264
- attribute("Boolean", :willvalidate?, :willValidate)
265
- attribute(String, :validity, :validity)
266
- attribute(String, :validationmessage, :validationMessage)
267
- attribute(String, :labels, :labels)
268
- end
269
- class KeygenCollection < ElementCollection
270
- end
271
-
272
241
  class TextArea < HTMLElement
273
242
  attribute(String, :autocomplete, :autocomplete)
274
243
  attribute("Boolean", :autofocus?, :autofocus)
@@ -276,7 +245,6 @@ module Watir
276
245
  attribute(String, :dirname, :dirName)
277
246
  attribute("Boolean", :disabled?, :disabled)
278
247
  attribute(String, :form, :form)
279
- attribute(String, :inputmode, :inputMode)
280
248
  attribute(Integer, :maxlength, :maxLength)
281
249
  attribute(Integer, :minlength, :minLength)
282
250
  attribute(String, :name, :name)
@@ -319,7 +287,6 @@ module Watir
319
287
  end
320
288
 
321
289
  class DataList < HTMLElement
322
- attribute(String, :options, :options)
323
290
  end
324
291
  class DataListCollection < ElementCollection
325
292
  end
@@ -333,7 +300,6 @@ module Watir
333
300
  attribute(String, :name, :name)
334
301
  attribute("Boolean", :required?, :required)
335
302
  attribute(String, :type, :type)
336
- attribute(String, :options, :options)
337
303
  attribute(Integer, :length, :length)
338
304
  attribute(String, :selectedoptions, :selectedOptions)
339
305
  attribute(Integer, :selectedindex, :selectedIndex)
@@ -358,7 +324,6 @@ module Watir
358
324
  attribute(String, :name, :name)
359
325
  attribute(String, :type, :type)
360
326
  attribute(String, :value, :value)
361
- attribute(String, :menu, :menu)
362
327
  attribute("Boolean", :willvalidate?, :willValidate)
363
328
  attribute(String, :validity, :validity)
364
329
  attribute(String, :validationmessage, :validationMessage)
@@ -384,7 +349,6 @@ module Watir
384
349
  attribute("Boolean", :formnovalidate?, :formNoValidate)
385
350
  attribute(String, :formtarget, :formTarget)
386
351
  attribute("Boolean", :indeterminate?, :indeterminate)
387
- attribute(String, :inputmode, :inputMode)
388
352
  attribute(String, :list, :list)
389
353
  attribute(String, :max, :max)
390
354
  attribute(Integer, :maxlength, :maxLength)
@@ -463,7 +427,6 @@ module Watir
463
427
  end
464
428
 
465
429
  class TableDataCell < TableCell
466
- attribute(String, :abbr, :abbr)
467
430
  end
468
431
  class TableDataCellCollection < ElementCollection
469
432
  end
@@ -529,6 +492,7 @@ module Watir
529
492
  attribute(String, :rellist, :relList)
530
493
  attribute(String, :hreflang, :hreflang)
531
494
  attribute(String, :type, :type)
495
+ attribute(String, :referrerpolicy, :referrerPolicy)
532
496
  attribute("Boolean", :nohref?, :noHref)
533
497
  attribute(String, :href, :href)
534
498
  attribute(String, :origin, :origin)
@@ -638,7 +602,6 @@ module Watir
638
602
  attribute(Integer, :vspace, :vspace)
639
603
  attribute(String, :codebase, :codeBase)
640
604
  attribute(String, :codetype, :codeType)
641
- attribute(String, :usemap, :useMap)
642
605
  attribute(String, :border, :border)
643
606
  end
644
607
  class ObjectCollection < ElementCollection
@@ -659,11 +622,14 @@ module Watir
659
622
  attribute(String, :name, :name)
660
623
  attribute(String, :sandbox, :sandbox)
661
624
  attribute("Boolean", :allowfullscreen?, :allowFullscreen)
625
+ attribute("Boolean", :allowpaymentrequest?, :allowPaymentRequest)
626
+ attribute(String, :referrerpolicy, :referrerPolicy)
662
627
  attribute(String, :contentdocument, :contentDocument)
663
628
  attribute(String, :contentwindow, :contentWindow)
664
629
  attribute(String, :align, :align)
665
630
  attribute(String, :scrolling, :scrolling)
666
631
  attribute(String, :frameborder, :frameBorder)
632
+ attribute(String, :longdesc, :longDesc)
667
633
  attribute(String, :marginheight, :marginHeight)
668
634
  attribute(String, :marginwidth, :marginWidth)
669
635
  end
@@ -677,11 +643,13 @@ module Watir
677
643
  attribute(String, :sizes, :sizes)
678
644
  attribute(String, :crossorigin, :crossOrigin)
679
645
  attribute(String, :usemap, :useMap)
646
+ attribute(String, :longdesc, :longDesc)
680
647
  attribute("Boolean", :ismap?, :isMap)
681
648
  attribute(Integer, :naturalwidth, :naturalWidth)
682
649
  attribute(Integer, :naturalheight, :naturalHeight)
683
650
  attribute("Boolean", :complete?, :complete)
684
651
  attribute(String, :currentsrc, :currentSrc)
652
+ attribute(String, :referrerpolicy, :referrerPolicy)
685
653
  attribute(String, :name, :name)
686
654
  attribute(String, :lowsrc, :lowsrc)
687
655
  attribute(String, :align, :align)
@@ -693,11 +661,11 @@ module Watir
693
661
  end
694
662
 
695
663
  class Source < HTMLElement
664
+ attribute(String, :src, :src)
665
+ attribute(String, :type, :type)
696
666
  attribute(String, :srcset, :srcset)
697
667
  attribute(String, :sizes, :sizes)
698
668
  attribute(String, :media, :media)
699
- attribute(String, :src, :src)
700
- attribute(String, :type, :type)
701
669
  end
702
670
  class SourceCollection < ElementCollection
703
671
  end
@@ -745,6 +713,7 @@ module Watir
745
713
  attribute(String, :rellist, :relList)
746
714
  attribute(String, :hreflang, :hreflang)
747
715
  attribute(String, :type, :type)
716
+ attribute(String, :referrerpolicy, :referrerPolicy)
748
717
  attribute(String, :coords, :coords)
749
718
  attribute(String, :charset, :charset)
750
719
  attribute(String, :name, :name)
@@ -830,7 +799,6 @@ module Watir
830
799
  end
831
800
 
832
801
  class Body < HTMLElement
833
- attribute(String, :link, :link)
834
802
  attribute(String, :vlink, :vLink)
835
803
  attribute(String, :alink, :aLink)
836
804
  attribute(String, :bgcolor, :bgColor)
@@ -1172,6 +1140,16 @@ module Watir
1172
1140
  end
1173
1141
  Watir.tag_to_class[:dfn] = HTMLElement
1174
1142
 
1143
+ # @return [Dialog]
1144
+ def dialog(*args)
1145
+ Dialog.new(self, extract_selector(args).merge(tag_name: "dialog"))
1146
+ end
1147
+ # @return [DialogCollection]
1148
+ def dialogs(*args)
1149
+ DialogCollection.new(self, extract_selector(args).merge(tag_name: "dialog"))
1150
+ end
1151
+ Watir.tag_to_class[:dialog] = Dialog
1152
+
1175
1153
  # @return [Div]
1176
1154
  def div(*args)
1177
1155
  Div.new(self, extract_selector(args).merge(tag_name: "div"))
@@ -1442,16 +1420,6 @@ module Watir
1442
1420
  end
1443
1421
  Watir.tag_to_class[:kbd] = HTMLElement
1444
1422
 
1445
- # @return [Keygen]
1446
- def keygen(*args)
1447
- Keygen.new(self, extract_selector(args).merge(tag_name: "keygen"))
1448
- end
1449
- # @return [KeygenCollection]
1450
- def keygens(*args)
1451
- KeygenCollection.new(self, extract_selector(args).merge(tag_name: "keygen"))
1452
- end
1453
- Watir.tag_to_class[:keygen] = Keygen
1454
-
1455
1423
  # @return [Label]
1456
1424
  def label(*args)
1457
1425
  Label.new(self, extract_selector(args).merge(tag_name: "label"))
@@ -1512,26 +1480,6 @@ module Watir
1512
1480
  end
1513
1481
  Watir.tag_to_class[:mark] = HTMLElement
1514
1482
 
1515
- # @return [Menu]
1516
- def menu(*args)
1517
- Menu.new(self, extract_selector(args).merge(tag_name: "menu"))
1518
- end
1519
- # @return [MenuCollection]
1520
- def menus(*args)
1521
- MenuCollection.new(self, extract_selector(args).merge(tag_name: "menu"))
1522
- end
1523
- Watir.tag_to_class[:menu] = Menu
1524
-
1525
- # @return [MenuItem]
1526
- def menuitem(*args)
1527
- MenuItem.new(self, extract_selector(args).merge(tag_name: "menuitem"))
1528
- end
1529
- # @return [MenuItemCollection]
1530
- def menuitems(*args)
1531
- MenuItemCollection.new(self, extract_selector(args).merge(tag_name: "menuitem"))
1532
- end
1533
- Watir.tag_to_class[:menuitem] = MenuItem
1534
-
1535
1483
  # @return [Meta]
1536
1484
  def meta(*args)
1537
1485
  Meta.new(self, extract_selector(args).merge(tag_name: "meta"))
@@ -1,40 +1,17 @@
1
1
  module Watir
2
2
  class IFrame < HTMLElement
3
-
4
- def locate
5
- return if @selector.empty?
6
- @query_scope.ensure_context
7
-
8
- selector = @selector.merge(tag_name: frame_tag)
9
- element_validator = element_validator_class.new
10
- selector_builder = selector_builder_class.new(@query_scope, selector, self.class.attribute_list)
11
- @locator = locator_class.new(@query_scope, selector, selector_builder, element_validator)
12
-
13
- element = @locator.locate
14
- element or raise unknown_exception, "unable to locate #{@selector[:tag_name]} using #{selector_string}"
15
-
16
- @element = FramedDriver.new(element, browser)
17
- end
18
-
19
- def ==(other)
20
- return false unless other.is_a?(self.class)
21
- wd == other.wd.is_a?(FramedDriver) ? other.wd.send(:wd) : other.wd
22
- end
3
+ #
4
+ # Move Driver context into the iframe
5
+ #
23
6
 
24
7
  def switch_to!
25
- locate.send :switch!
26
- end
27
-
28
- def assert_exists
29
- if @element && @selector.empty?
30
- raise UnknownFrameException, "wrapping a Selenium element as a Frame is not currently supported"
31
- end
32
-
33
- super
8
+ locate unless located?
9
+ wd.switch!
34
10
  end
35
11
 
36
12
  #
37
13
  # Returns text of iframe body.
14
+ # #body ensures context so this method does not have to
38
15
  #
39
16
  # @return [String]
40
17
  #
@@ -50,8 +27,15 @@ module Watir
50
27
  #
51
28
 
52
29
  def html
53
- wait_for_exists
54
- @element.page_source
30
+ wd.page_source
31
+ end
32
+
33
+ #
34
+ # Delegate sending keystrokes to FramedDriver
35
+ #
36
+
37
+ def send_keys(*args)
38
+ wd.send_keys(*args)
55
39
  end
56
40
 
57
41
  #
@@ -61,106 +45,108 @@ module Watir
61
45
  #
62
46
 
63
47
  def execute_script(script, *args)
64
- args.map! { |e| e.kind_of?(Watir::Element) ? e.wd : e }
48
+ args.map! { |e| e.is_a?(Watir::Element) ? e.wd : e }
65
49
  returned = driver.execute_script(script, *args)
66
50
 
67
- browser.send(:wrap_elements_in, self, returned)
51
+ browser.wrap_elements_in(self, returned)
68
52
  end
69
53
 
70
- def ensure_context
71
- switch_to!
54
+ #
55
+ # Provides access to underlying Selenium Objects as delegated by FramedDriver
56
+ #
57
+ # @return [Watir::FramedDriver]
58
+ #
59
+
60
+ def wd
61
+ super
62
+ FramedDriver.new(@element, browser)
72
63
  end
73
64
 
74
- private
65
+ #
66
+ # @api private
67
+ #
68
+ # Always relocate a FramedDriver to ensure proper context switching
69
+ #
70
+ # @return [Boolean]
71
+ #
75
72
 
76
- def frame_tag
77
- 'iframe'
73
+ def relocate?
74
+ true
78
75
  end
79
76
 
77
+ private
78
+
80
79
  def unknown_exception
81
80
  Watir::Exception::UnknownFrameException
82
81
  end
83
-
84
82
  end # IFrame
85
83
 
86
-
87
84
  class IFrameCollection < ElementCollection
88
85
  end # IFrameCollection
89
86
 
90
-
91
87
  class Frame < IFrame
92
-
93
- private
94
-
95
- def frame_tag
96
- 'frame'
97
- end
98
-
99
88
  end # Frame
100
89
 
101
-
102
90
  class FrameCollection < IFrameCollection
103
91
  end # FrameCollection
104
92
 
105
-
106
93
  module Container
107
-
108
94
  def frame(*args)
109
- Frame.new(self, extract_selector(args).merge(tag_name: "frame"))
95
+ Frame.new(self, extract_selector(args).merge(tag_name: 'frame'))
110
96
  end
111
97
 
112
98
  def frames(*args)
113
- FrameCollection.new(self, extract_selector(args).merge(tag_name: "frame"))
99
+ FrameCollection.new(self, extract_selector(args).merge(tag_name: 'frame'))
114
100
  end
115
-
116
101
  end # Container
117
102
 
118
-
119
- # @api private
120
103
  #
121
- # another hack..
104
+ # @api private
122
105
  #
123
106
 
124
107
  class FramedDriver
125
108
  def initialize(element, browser)
126
109
  @element = element
127
110
  @browser = browser
128
- @driver = browser.driver
111
+ @driver = browser.wd
129
112
  end
130
113
 
131
114
  def ==(other)
132
115
  wd == other.wd
133
116
  end
134
- alias_method :eql?, :==
117
+ alias eql? ==
135
118
 
136
119
  def send_keys(*args)
137
120
  switch!
138
121
  @driver.switch_to.active_element.send_keys(*args)
139
122
  end
140
123
 
141
- protected
124
+ def switch!
125
+ @driver.switch_to.frame @element
126
+ @browser.default_context = false
127
+ rescue Selenium::WebDriver::Error::NoSuchFrameError => e
128
+ raise Exception::UnknownFrameException, e.message
129
+ end
142
130
 
143
131
  def wd
144
132
  @element
145
133
  end
146
134
 
147
- private
135
+ def respond_to_missing?(meth)
136
+ @driver.respond_to?(meth) || @element.respond_to?(meth)
137
+ end
148
138
 
149
139
  def method_missing(meth, *args, &blk)
150
- if @driver.respond_to?(meth)
140
+ if %i[find_element find_elements].include?(meth)
141
+ @driver.send(meth, *args, &blk)
142
+ elsif @driver.respond_to?(meth)
151
143
  switch!
152
144
  @driver.send(meth, *args, &blk)
153
- else
145
+ elsif @element.respond_to?(meth)
154
146
  @element.send(meth, *args, &blk)
147
+ else
148
+ super
155
149
  end
156
150
  end
157
-
158
- def switch!
159
- @driver.switch_to.frame @element
160
- @browser.default_context = false
161
- rescue Selenium::WebDriver::Error::NoSuchFrameError => e
162
- raise Exception::UnknownFrameException, e.message
163
- end
164
-
165
151
  end # FramedDriver
166
152
  end # Watir