watir 7.2.0 → 7.2.1

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 (139) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/chrome.yml +1 -1
  3. data/.github/workflows/edge.yml +1 -1
  4. data/.github/workflows/firefox.yml +1 -1
  5. data/.github/workflows/ie.yml +1 -1
  6. data/.github/workflows/safari.yml +1 -1
  7. data/.github/workflows/unit.yml +1 -1
  8. data/.rubocop.yml +25 -12
  9. data/.rubocop_todo.yml +8 -1
  10. data/CHANGES.md +6 -1
  11. data/LICENSE +2 -2
  12. data/lib/watir/capabilities.rb +1 -1
  13. data/lib/watir/locators/anchor/selector_builder.rb +3 -0
  14. data/lib/watir/locators/element/matcher.rb +2 -1
  15. data/lib/watir/locators/element/selector_builder/regexp_disassembler.rb +2 -1
  16. data/lib/watir/locators/text_field/matcher.rb +0 -4
  17. data/lib/watir/version.rb +1 -1
  18. data/spec/locator_spec_helper.rb +0 -8
  19. data/spec/unit/capabilities_spec.rb +553 -561
  20. data/spec/unit/element_locator_spec.rb +89 -78
  21. data/spec/unit/match_elements/button_spec.rb +69 -62
  22. data/spec/unit/match_elements/element_spec.rb +303 -309
  23. data/spec/unit/match_elements/text_field_spec.rb +76 -73
  24. data/spec/unit/selector_builder/anchor_spec.rb +39 -33
  25. data/spec/unit/selector_builder/button_spec.rb +209 -202
  26. data/spec/unit/selector_builder/cell_spec.rb +48 -42
  27. data/spec/unit/selector_builder/element_spec.rb +634 -627
  28. data/spec/unit/selector_builder/row_spec.rb +119 -113
  29. data/spec/unit/selector_builder/text_field_spec.rb +195 -188
  30. data/spec/unit/selector_builder/textarea_spec.rb +22 -14
  31. data/spec/unit/wait_spec.rb +85 -81
  32. data/spec/watirspec/adjacent_spec.rb +249 -247
  33. data/spec/watirspec/after_hooks_spec.rb +161 -159
  34. data/spec/watirspec/alert_spec.rb +61 -58
  35. data/spec/watirspec/browser_spec.rb +409 -409
  36. data/spec/watirspec/capabilities_spec.rb +89 -99
  37. data/spec/watirspec/cookies_spec.rb +120 -118
  38. data/spec/watirspec/drag_and_drop_spec.rb +26 -24
  39. data/spec/watirspec/element_hidden_spec.rb +66 -60
  40. data/spec/watirspec/elements/area_spec.rb +49 -47
  41. data/spec/watirspec/elements/areas_spec.rb +27 -25
  42. data/spec/watirspec/elements/button_spec.rb +253 -251
  43. data/spec/watirspec/elements/buttons_spec.rb +36 -34
  44. data/spec/watirspec/elements/checkbox_spec.rb +48 -36
  45. data/spec/watirspec/elements/checkboxes_spec.rb +29 -27
  46. data/spec/watirspec/elements/collections_spec.rb +126 -119
  47. data/spec/watirspec/elements/date_field_spec.rb +185 -183
  48. data/spec/watirspec/elements/date_fields_spec.rb +29 -27
  49. data/spec/watirspec/elements/date_time_field_spec.rb +197 -195
  50. data/spec/watirspec/elements/date_time_fields_spec.rb +30 -28
  51. data/spec/watirspec/elements/dd_spec.rb +87 -85
  52. data/spec/watirspec/elements/dds_spec.rb +27 -25
  53. data/spec/watirspec/elements/del_spec.rb +106 -104
  54. data/spec/watirspec/elements/dels_spec.rb +26 -24
  55. data/spec/watirspec/elements/div_spec.rb +225 -221
  56. data/spec/watirspec/elements/divs_spec.rb +37 -35
  57. data/spec/watirspec/elements/dl_spec.rb +110 -108
  58. data/spec/watirspec/elements/dls_spec.rb +28 -26
  59. data/spec/watirspec/elements/dt_spec.rb +86 -84
  60. data/spec/watirspec/elements/dts_spec.rb +27 -25
  61. data/spec/watirspec/elements/element_spec.rb +794 -775
  62. data/spec/watirspec/elements/elements_spec.rb +40 -38
  63. data/spec/watirspec/elements/em_spec.rb +62 -60
  64. data/spec/watirspec/elements/ems_spec.rb +28 -26
  65. data/spec/watirspec/elements/filefield_spec.rb +116 -114
  66. data/spec/watirspec/elements/filefields_spec.rb +28 -26
  67. data/spec/watirspec/elements/font_spec.rb +20 -18
  68. data/spec/watirspec/elements/form_spec.rb +51 -49
  69. data/spec/watirspec/elements/forms_spec.rb +29 -27
  70. data/spec/watirspec/elements/frame_spec.rb +89 -87
  71. data/spec/watirspec/elements/frames_spec.rb +27 -25
  72. data/spec/watirspec/elements/hidden_spec.rb +81 -79
  73. data/spec/watirspec/elements/hiddens_spec.rb +28 -26
  74. data/spec/watirspec/elements/hn_spec.rb +59 -57
  75. data/spec/watirspec/elements/hns_spec.rb +26 -24
  76. data/spec/watirspec/elements/iframe_spec.rb +195 -191
  77. data/spec/watirspec/elements/iframes_spec.rb +31 -29
  78. data/spec/watirspec/elements/image_spec.rb +148 -146
  79. data/spec/watirspec/elements/images_spec.rb +26 -24
  80. data/spec/watirspec/elements/input_spec.rb +9 -7
  81. data/spec/watirspec/elements/ins_spec.rb +106 -104
  82. data/spec/watirspec/elements/inses_spec.rb +26 -24
  83. data/spec/watirspec/elements/label_spec.rb +56 -54
  84. data/spec/watirspec/elements/labels_spec.rb +26 -24
  85. data/spec/watirspec/elements/li_spec.rb +76 -74
  86. data/spec/watirspec/elements/link_spec.rb +173 -177
  87. data/spec/watirspec/elements/links_spec.rb +45 -43
  88. data/spec/watirspec/elements/lis_spec.rb +27 -25
  89. data/spec/watirspec/elements/list_spec.rb +44 -42
  90. data/spec/watirspec/elements/map_spec.rb +57 -55
  91. data/spec/watirspec/elements/maps_spec.rb +27 -25
  92. data/spec/watirspec/elements/meta_spec.rb +16 -14
  93. data/spec/watirspec/elements/metas_spec.rb +26 -24
  94. data/spec/watirspec/elements/ol_spec.rb +56 -65
  95. data/spec/watirspec/elements/ols_spec.rb +26 -24
  96. data/spec/watirspec/elements/option_spec.rb +91 -89
  97. data/spec/watirspec/elements/p_spec.rb +81 -79
  98. data/spec/watirspec/elements/pre_spec.rb +77 -75
  99. data/spec/watirspec/elements/pres_spec.rb +26 -24
  100. data/spec/watirspec/elements/ps_spec.rb +26 -24
  101. data/spec/watirspec/elements/radio_spec.rb +251 -249
  102. data/spec/watirspec/elements/radios_spec.rb +28 -26
  103. data/spec/watirspec/elements/select_list_spec.rb +537 -526
  104. data/spec/watirspec/elements/select_lists_spec.rb +32 -30
  105. data/spec/watirspec/elements/span_spec.rb +112 -110
  106. data/spec/watirspec/elements/spans_spec.rb +26 -24
  107. data/spec/watirspec/elements/strong_spec.rb +58 -58
  108. data/spec/watirspec/elements/strongs_spec.rb +28 -26
  109. data/spec/watirspec/elements/table_spec.rb +192 -139
  110. data/spec/watirspec/elements/tables_spec.rb +28 -26
  111. data/spec/watirspec/elements/tbody_spec.rb +74 -72
  112. data/spec/watirspec/elements/tbodys_spec.rb +40 -38
  113. data/spec/watirspec/elements/td_spec.rb +66 -64
  114. data/spec/watirspec/elements/tds_spec.rb +41 -39
  115. data/spec/watirspec/elements/text_field_spec.rb +206 -204
  116. data/spec/watirspec/elements/text_fields_spec.rb +30 -28
  117. data/spec/watirspec/elements/textarea_spec.rb +20 -18
  118. data/spec/watirspec/elements/textareas_spec.rb +18 -16
  119. data/spec/watirspec/elements/tfoot_spec.rb +65 -63
  120. data/spec/watirspec/elements/tfoots_spec.rb +42 -40
  121. data/spec/watirspec/elements/thead_spec.rb +65 -63
  122. data/spec/watirspec/elements/theads_spec.rb +42 -40
  123. data/spec/watirspec/elements/tr_spec.rb +48 -46
  124. data/spec/watirspec/elements/trs_spec.rb +42 -40
  125. data/spec/watirspec/elements/ul_spec.rb +56 -54
  126. data/spec/watirspec/elements/uls_spec.rb +26 -24
  127. data/spec/watirspec/radio_set_spec.rb +269 -267
  128. data/spec/watirspec/screenshot_spec.rb +20 -18
  129. data/spec/watirspec/scroll_spec.rb +152 -148
  130. data/spec/watirspec/shadow_root_spec.rb +86 -83
  131. data/spec/watirspec/user_editable_spec.rb +200 -198
  132. data/spec/watirspec/wait_spec.rb +289 -295
  133. data/spec/watirspec/window_switching_spec.rb +422 -434
  134. data/spec/watirspec_helper.rb +1 -23
  135. data/watir.gemspec +5 -4
  136. metadata +44 -33
  137. data/spec/watirspec/attributes_spec.rb +0 -18
  138. data/spec/watirspec/elements/table_nesting_spec.rb +0 -51
  139. data/spec/watirspec/special_chars_spec.rb +0 -23
@@ -2,201 +2,203 @@
2
2
 
3
3
  require 'watirspec_helper'
4
4
 
5
- describe 'DateTimeField' do
6
- before :each do
7
- browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
8
- end
9
-
10
- # Exists method
11
- describe '#exists?' do
12
- it 'returns true if the element exists' do
13
- expect(browser.date_time_field(id: 'html5_datetime-local')).to exist
14
- expect(browser.date_time_field(id: /html5_datetime-local/)).to exist
15
- expect(browser.date_time_field(name: 'html5_datetime-local')).to exist
16
- expect(browser.date_time_field(name: /html5_datetime-local/)).to exist
17
- expect(browser.date_time_field(text: '')).to exist
18
- expect(browser.date_time_field(text: //)).to exist
19
- expect(browser.date_time_field(index: 0)).to exist
20
- expect(browser.date_time_field(label: 'HTML5 Datetime Local')).to exist
21
- expect(browser.date_time_field(label: /Local$/)).to exist
22
- end
23
-
24
- it 'returns true if the datetime-local element exists',
25
- except: {browser: :ie, reason: 'Date type not recognized'} do
26
- expect(browser.date_time_field(xpath: "//input[@id='html5_datetime-local']")).to exist
27
- end
28
-
29
- it 'returns the date-time field if given no args' do
30
- expect(browser.date_time_field).to exist
31
- end
32
-
33
- it 'respects date-time fields types',
34
- except: {browser: :ie, reason: 'Date type not recognized'} do
35
- expect(browser.date_time_field.type).to eq('datetime-local')
36
- end
37
-
38
- it 'returns false if the element does not exist' do
39
- expect(browser.date_time_field(id: 'no_such_id')).to_not exist
40
- expect(browser.date_time_field(id: /no_such_id/)).to_not exist
41
- expect(browser.date_time_field(name: 'no_such_name')).to_not exist
42
- expect(browser.date_time_field(name: /no_such_name/)).to_not exist
43
- expect(browser.date_time_field(value: 'no_such_value')).to_not exist
44
- expect(browser.date_time_field(value: /no_such_value/)).to_not exist
45
- expect(browser.date_time_field(text: 'no_such_text')).to_not exist
46
- expect(browser.date_time_field(text: /no_such_text/)).to_not exist
47
- expect(browser.date_time_field(class: 'no_such_class')).to_not exist
48
- expect(browser.date_time_field(class: /no_such_class/)).to_not exist
49
- expect(browser.date_time_field(index: 1337)).to_not exist
50
- expect(browser.date_time_field(xpath: "//input[@id='no_such_id']")).to_not exist
51
- expect(browser.date_time_field(label: 'bad label')).to_not exist
52
- expect(browser.date_time_field(label: /bad label/)).to_not exist
53
- end
54
-
55
- it "raises TypeError when 'what' argument is invalid" do
56
- expect { browser.date_time_field(id: 3.14).exists? }.to raise_error(TypeError)
57
- end
58
- end
59
-
60
- # Attribute methods
61
- describe '#id' do
62
- it 'returns the id attribute if the date-time field exists' do
63
- expect(browser.date_time_field(name: 'html5_datetime-local').id).to eq 'html5_datetime-local'
64
- end
65
-
66
- it "raises UnknownObjectException if the date-time field doesn't exist" do
67
- expect { browser.date_time_field(index: 1337).id }.to raise_unknown_object_exception
68
- end
69
- end
70
-
71
- describe '#name' do
72
- it 'returns the name attribute if the date-time field exists' do
73
- expect(browser.date_time_field(id: 'html5_datetime-local').name).to eq 'html5_datetime-local'
74
- end
75
-
76
- it "raises UnknownObjectException if the date-time field doesn't exist" do
77
- expect { browser.date_time_field(index: 1337).name }.to raise_unknown_object_exception
78
- end
79
- end
80
-
81
- describe '#type' do
82
- it 'returns the type attribute if the date-time field exists',
83
- except: {browser: :ie, reason: 'Date type not recognized'} do
84
- expect(browser.date_time_field(id: 'html5_datetime-local').type).to eq 'datetime-local'
85
- end
86
-
87
- it "raises UnknownObjectException if the date-time field doesn't exist" do
88
- expect { browser.date_time_field(index: 1337).type }.to raise_unknown_object_exception
89
- end
90
- end
91
-
92
- describe '#value' do
93
- it 'returns the value attribute if the date-time field exists' do
94
- expect(browser.date_time_field(id: 'html5_datetime-local').value).to eq ''
95
- end
96
-
97
- it "raises UnknownObjectException if the date-time field doesn't exist" do
98
- expect { browser.date_time_field(index: 1337).value }.to raise_unknown_object_exception
99
- end
100
- end
101
-
102
- describe '#respond_to?' do
103
- it 'returns true for all attribute methods' do
104
- expect(browser.date_time_field).to respond_to(:class_name)
105
- expect(browser.date_time_field).to respond_to(:id)
106
- expect(browser.date_time_field).to respond_to(:name)
107
- expect(browser.date_time_field).to respond_to(:title)
108
- expect(browser.date_time_field).to respond_to(:type)
109
- expect(browser.date_time_field).to respond_to(:value)
110
- end
111
- end
112
-
113
- # Access methods
114
- describe '#enabled?' do
115
- it 'returns true for enabled date-time fields' do
116
- expect(browser.browser.date_time_field(id: 'html5_datetime-local')).to be_enabled
117
- end
118
-
119
- it "raises UnknownObjectException if the date-time field doesn't exist" do
120
- expect { browser.browser.date_time_field(id: 'no_such_id').enabled? }.to raise_unknown_object_exception
121
- end
122
- end
123
-
124
- # Manipulation methods
125
- describe '#value= ' do
126
- it 'sets the value of the element' do
127
- date_time = Time.now
128
- date_time_field = browser.date_time_field(id: 'html5_datetime-local')
129
- date_time_field.value = date_time
130
- expect(Time.parse(date_time_field.value).strftime('%Y-%m-%dT%H:%M'))
131
- .to eq date_time.strftime('%Y-%m-%dT%H:%M')
132
- end
133
-
134
- it 'sets the value when accessed through the enclosing Form' do
135
- date_time = Time.now
136
- date_time_field = browser.form(id: 'new_user').date_time_field(id: 'html5_datetime-local')
137
- date_time_field.value = date_time
138
- expect(Time.parse(date_time_field.value).strftime('%Y-%m-%dT%H:%M'))
139
- .to eq date_time.strftime('%Y-%m-%dT%H:%M')
140
- end
141
-
142
- it "raises UnknownObjectException if the date-time field doesn't exist" do
143
- expect { browser.date_time_field(id: 'no_such_id').value = Time.now }.to raise_unknown_object_exception
144
- end
145
-
146
- it 'raises ArgumentError if using non-Date parameter' do
147
- expect { browser.date_time_field(id: 'no_such_id').value = 'foo' }.to raise_exception ArgumentError
148
- end
149
- end
150
-
151
- describe '#set!' do
152
- it 'sets the value of the element' do
153
- date_time = Time.now
154
- date_time_field = browser.date_time_field(id: 'html5_datetime-local')
155
- date_time_field.set! date_time
156
- expect(Time.parse(date_time_field.value).strftime('%Y-%m-%dT%H:%M'))
157
- .to eq date_time.strftime('%Y-%m-%dT%H:%M')
158
- end
159
-
160
- it 'sets the value when accessed through the enclosing Form' do
161
- date_time = Time.now
162
- date_time_field = browser.form(id: 'new_user').date_time_field(id: 'html5_datetime-local')
163
- date_time_field.set! date_time
164
- expect(Time.parse(date_time_field.value).strftime('%Y-%m-%dT%H:%M'))
165
- .to eq date_time.strftime('%Y-%m-%dT%H:%M')
166
- end
167
-
168
- it 'raises ArgumentError when no arguments are provided' do
169
- expect { browser.date_time_field(id: 'html5_datetime-local').set! }.to raise_exception ArgumentError
170
- end
171
-
172
- it "raises UnknownObjectException if the date-time field doesn't exist" do
173
- expect { browser.date_time_field(id: 'no_such_id').set!(Time.now) }.to raise_unknown_object_exception
174
- end
175
- end
176
-
177
- describe '#set' do
178
- it 'sets the value of the element' do
179
- date_time = Time.now
180
- date_time_field = browser.date_time_field(id: 'html5_datetime-local')
181
- date_time_field.set(date_time)
182
- expect(Time.parse(date_time_field.value).strftime('%Y-%m-%dT%H:%M'))
183
- .to eq date_time.strftime('%Y-%m-%dT%H:%M')
184
- end
185
-
186
- it 'sets the value when accessed through the enclosing Form' do
187
- date_time = Time.now
188
- date_time_field = browser.form(id: 'new_user').date_time_field(id: 'html5_datetime-local')
189
- date_time_field.set date_time
190
- expect(Time.parse(date_time_field.value).strftime('%Y-%m-%dT%H:%M'))
191
- .to eq date_time.strftime('%Y-%m-%dT%H:%M')
192
- end
193
-
194
- it 'raises ArgumentError when no arguments are provided' do
195
- expect { browser.date_time_field(id: 'html5_datetime-local').set }.to raise_exception ArgumentError
196
- end
197
-
198
- it "raises UnknownObjectException if the date-time field doesn't exist" do
199
- expect { browser.date_time_field(id: 'no_such_id').set(Time.now) }.to raise_unknown_object_exception
5
+ module Watir
6
+ describe DateTimeField do
7
+ before do
8
+ browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
9
+ end
10
+
11
+ # Exists method
12
+ describe '#exists?' do
13
+ it 'returns true if the element exists' do
14
+ expect(browser.date_time_field(id: 'html5_datetime-local')).to exist
15
+ expect(browser.date_time_field(id: /html5_datetime-local/)).to exist
16
+ expect(browser.date_time_field(name: 'html5_datetime-local')).to exist
17
+ expect(browser.date_time_field(name: /html5_datetime-local/)).to exist
18
+ expect(browser.date_time_field(text: '')).to exist
19
+ expect(browser.date_time_field(text: //)).to exist
20
+ expect(browser.date_time_field(index: 0)).to exist
21
+ expect(browser.date_time_field(label: 'HTML5 Datetime Local')).to exist
22
+ expect(browser.date_time_field(label: /Local$/)).to exist
23
+ end
24
+
25
+ it 'returns true if the datetime-local element exists',
26
+ except: {browser: :ie, reason: 'Date type not recognized'} do
27
+ expect(browser.date_time_field(xpath: "//input[@id='html5_datetime-local']")).to exist
28
+ end
29
+
30
+ it 'returns the date-time field if given no args' do
31
+ expect(browser.date_time_field).to exist
32
+ end
33
+
34
+ it 'respects date-time fields types',
35
+ except: {browser: :ie, reason: 'Date type not recognized'} do
36
+ expect(browser.date_time_field.type).to eq('datetime-local')
37
+ end
38
+
39
+ it 'returns false if the element does not exist' do
40
+ expect(browser.date_time_field(id: 'no_such_id')).not_to exist
41
+ expect(browser.date_time_field(id: /no_such_id/)).not_to exist
42
+ expect(browser.date_time_field(name: 'no_such_name')).not_to exist
43
+ expect(browser.date_time_field(name: /no_such_name/)).not_to exist
44
+ expect(browser.date_time_field(value: 'no_such_value')).not_to exist
45
+ expect(browser.date_time_field(value: /no_such_value/)).not_to exist
46
+ expect(browser.date_time_field(text: 'no_such_text')).not_to exist
47
+ expect(browser.date_time_field(text: /no_such_text/)).not_to exist
48
+ expect(browser.date_time_field(class: 'no_such_class')).not_to exist
49
+ expect(browser.date_time_field(class: /no_such_class/)).not_to exist
50
+ expect(browser.date_time_field(index: 1337)).not_to exist
51
+ expect(browser.date_time_field(xpath: "//input[@id='no_such_id']")).not_to exist
52
+ expect(browser.date_time_field(label: 'bad label')).not_to exist
53
+ expect(browser.date_time_field(label: /bad label/)).not_to exist
54
+ end
55
+
56
+ it "raises TypeError when 'what' argument is invalid" do
57
+ expect { browser.date_time_field(id: 3.14).exists? }.to raise_error(TypeError)
58
+ end
59
+ end
60
+
61
+ # Attribute methods
62
+ describe '#id' do
63
+ it 'returns the id attribute if the date-time field exists' do
64
+ expect(browser.date_time_field(name: 'html5_datetime-local').id).to eq 'html5_datetime-local'
65
+ end
66
+
67
+ it "raises UnknownObjectException if the date-time field doesn't exist" do
68
+ expect { browser.date_time_field(index: 1337).id }.to raise_unknown_object_exception
69
+ end
70
+ end
71
+
72
+ describe '#name' do
73
+ it 'returns the name attribute if the date-time field exists' do
74
+ expect(browser.date_time_field(id: 'html5_datetime-local').name).to eq 'html5_datetime-local'
75
+ end
76
+
77
+ it "raises UnknownObjectException if the date-time field doesn't exist" do
78
+ expect { browser.date_time_field(index: 1337).name }.to raise_unknown_object_exception
79
+ end
80
+ end
81
+
82
+ describe '#type' do
83
+ it 'returns the type attribute if the date-time field exists',
84
+ except: {browser: :ie, reason: 'Date type not recognized'} do
85
+ expect(browser.date_time_field(id: 'html5_datetime-local').type).to eq 'datetime-local'
86
+ end
87
+
88
+ it "raises UnknownObjectException if the date-time field doesn't exist" do
89
+ expect { browser.date_time_field(index: 1337).type }.to raise_unknown_object_exception
90
+ end
91
+ end
92
+
93
+ describe '#value' do
94
+ it 'returns the value attribute if the date-time field exists' do
95
+ expect(browser.date_time_field(id: 'html5_datetime-local').value).to eq ''
96
+ end
97
+
98
+ it "raises UnknownObjectException if the date-time field doesn't exist" do
99
+ expect { browser.date_time_field(index: 1337).value }.to raise_unknown_object_exception
100
+ end
101
+ end
102
+
103
+ describe '#respond_to?' do
104
+ it 'returns true for all attribute methods' do
105
+ expect(browser.date_time_field).to respond_to(:class_name)
106
+ expect(browser.date_time_field).to respond_to(:id)
107
+ expect(browser.date_time_field).to respond_to(:name)
108
+ expect(browser.date_time_field).to respond_to(:title)
109
+ expect(browser.date_time_field).to respond_to(:type)
110
+ expect(browser.date_time_field).to respond_to(:value)
111
+ end
112
+ end
113
+
114
+ # Access methods
115
+ describe '#enabled?' do
116
+ it 'returns true for enabled date-time fields' do
117
+ expect(browser.browser.date_time_field(id: 'html5_datetime-local')).to be_enabled
118
+ end
119
+
120
+ it "raises UnknownObjectException if the date-time field doesn't exist" do
121
+ expect { browser.browser.date_time_field(id: 'no_such_id').enabled? }.to raise_unknown_object_exception
122
+ end
123
+ end
124
+
125
+ # Manipulation methods
126
+ describe '#value=' do
127
+ it 'sets the value of the element' do
128
+ date_time = ::Time.now
129
+ date_time_field = browser.date_time_field(id: 'html5_datetime-local')
130
+ date_time_field.value = date_time
131
+ expect(::Time.parse(date_time_field.value).strftime('%Y-%m-%dT%H:%M'))
132
+ .to eq date_time.strftime('%Y-%m-%dT%H:%M')
133
+ end
134
+
135
+ it 'sets the value when accessed through the enclosing Form' do
136
+ date_time = ::Time.now
137
+ date_time_field = browser.form(id: 'new_user').date_time_field(id: 'html5_datetime-local')
138
+ date_time_field.value = date_time
139
+ expect(::Time.parse(date_time_field.value).strftime('%Y-%m-%dT%H:%M'))
140
+ .to eq date_time.strftime('%Y-%m-%dT%H:%M')
141
+ end
142
+
143
+ it "raises UnknownObjectException if the date-time field doesn't exist" do
144
+ expect { browser.date_time_field(id: 'no_such_id').value = ::Time.now }.to raise_unknown_object_exception
145
+ end
146
+
147
+ it 'raises ArgumentError if using non-Date parameter' do
148
+ expect { browser.date_time_field(id: 'no_such_id').value = 'foo' }.to raise_exception ArgumentError
149
+ end
150
+ end
151
+
152
+ describe '#set!' do
153
+ it 'sets the value of the element' do
154
+ date_time = ::Time.now
155
+ date_time_field = browser.date_time_field(id: 'html5_datetime-local')
156
+ date_time_field.set! date_time
157
+ expect(::Time.parse(date_time_field.value).strftime('%Y-%m-%dT%H:%M'))
158
+ .to eq date_time.strftime('%Y-%m-%dT%H:%M')
159
+ end
160
+
161
+ it 'sets the value when accessed through the enclosing Form' do
162
+ date_time = ::Time.now
163
+ date_time_field = browser.form(id: 'new_user').date_time_field(id: 'html5_datetime-local')
164
+ date_time_field.set! date_time
165
+ expect(::Time.parse(date_time_field.value).strftime('%Y-%m-%dT%H:%M'))
166
+ .to eq date_time.strftime('%Y-%m-%dT%H:%M')
167
+ end
168
+
169
+ it 'raises ArgumentError when no arguments are provided' do
170
+ expect { browser.date_time_field(id: 'html5_datetime-local').set! }.to raise_exception ArgumentError
171
+ end
172
+
173
+ it "raises UnknownObjectException if the date-time field doesn't exist" do
174
+ expect { browser.date_time_field(id: 'no_such_id').set!(::Time.now) }.to raise_unknown_object_exception
175
+ end
176
+ end
177
+
178
+ describe '#set' do
179
+ it 'sets the value of the element' do
180
+ date_time = ::Time.now
181
+ date_time_field = browser.date_time_field(id: 'html5_datetime-local')
182
+ date_time_field.set(date_time)
183
+ expect(::Time.parse(date_time_field.value).strftime('%Y-%m-%dT%H:%M'))
184
+ .to eq date_time.strftime('%Y-%m-%dT%H:%M')
185
+ end
186
+
187
+ it 'sets the value when accessed through the enclosing Form' do
188
+ date_time = ::Time.now
189
+ date_time_field = browser.form(id: 'new_user').date_time_field(id: 'html5_datetime-local')
190
+ date_time_field.set date_time
191
+ expect(::Time.parse(date_time_field.value).strftime('%Y-%m-%dT%H:%M'))
192
+ .to eq date_time.strftime('%Y-%m-%dT%H:%M')
193
+ end
194
+
195
+ it 'raises ArgumentError when no arguments are provided' do
196
+ expect { browser.date_time_field(id: 'html5_datetime-local').set }.to raise_exception ArgumentError
197
+ end
198
+
199
+ it "raises UnknownObjectException if the date-time field doesn't exist" do
200
+ expect { browser.date_time_field(id: 'no_such_id').set(::Time.now) }.to raise_unknown_object_exception
201
+ end
200
202
  end
201
203
  end
202
204
  end
@@ -2,44 +2,46 @@
2
2
 
3
3
  require 'watirspec_helper'
4
4
 
5
- describe 'DateTimeFields' do
6
- before :each do
7
- browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
8
- end
5
+ module Watir
6
+ describe DateTimeFieldCollection do
7
+ before do
8
+ browser.goto(WatirSpec.url_for('forms_with_input_elements.html'))
9
+ end
9
10
 
10
- describe 'with selectors' do
11
- it 'returns the matching elements' do
12
- list = [browser.date_time_field(name: 'html5_datetime-local')]
13
- expect(browser.date_time_fields(name: 'html5_datetime-local').to_a).to eq list
11
+ describe 'with selectors' do
12
+ it 'returns the matching elements' do
13
+ list = [browser.date_time_field(name: 'html5_datetime-local')]
14
+ expect(browser.date_time_fields(name: 'html5_datetime-local').to_a).to eq list
15
+ end
14
16
  end
15
- end
16
17
 
17
- describe '#length' do
18
- it 'returns the number of date_time_fields' do
19
- expect(browser.date_time_fields.length).to eq 1
18
+ describe '#length' do
19
+ it 'returns the number of date_time_fields' do
20
+ expect(browser.date_time_fields.length).to eq 1
21
+ end
20
22
  end
21
- end
22
23
 
23
- describe '#[]' do
24
- it 'returns the date_time_field at the given index' do
25
- expect(browser.date_time_fields[0].id).to eq 'html5_datetime-local'
24
+ describe '#[]' do
25
+ it 'returns the date_time_field at the given index' do
26
+ expect(browser.date_time_fields[0].id).to eq 'html5_datetime-local'
27
+ end
26
28
  end
27
- end
28
29
 
29
- describe '#each' do
30
- it 'iterates through date_time_fields correctly' do
31
- count = 0
30
+ describe '#each' do
31
+ it 'iterates through date_time_fields correctly' do
32
+ count = 0
32
33
 
33
- browser.date_time_fields.each_with_index do |c, index|
34
- expect(c).to be_instance_of(Watir::DateTimeField)
35
- expect(c.name).to eq browser.date_time_field(index: index).name
36
- expect(c.id).to eq browser.date_time_field(index: index).id
37
- expect(c.value).to eq browser.date_time_field(index: index).value
34
+ browser.date_time_fields.each_with_index do |c, index|
35
+ expect(c).to be_instance_of(DateTimeField)
36
+ expect(c.name).to eq browser.date_time_field(index: index).name
37
+ expect(c.id).to eq browser.date_time_field(index: index).id
38
+ expect(c.value).to eq browser.date_time_field(index: index).value
38
39
 
39
- count += 1
40
- end
40
+ count += 1
41
+ end
41
42
 
42
- expect(count).to be > 0
43
+ expect(count).to be > 0
44
+ end
43
45
  end
44
46
  end
45
47
  end