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,253 +2,255 @@
2
2
 
3
3
  require 'watirspec_helper'
4
4
 
5
- describe 'Adjacent Elements' do
6
- before(:all) do
7
- browser.goto(WatirSpec.url_for('nested_elements.html'))
8
- end
9
-
10
- describe '#parent' do
11
- it 'gets immediate parent of an element by default' do
12
- expect(browser.div(id: 'first_sibling').parent.id).to eq 'parent'
13
- expect(browser.div(id: 'first_sibling').parent).to be_a Watir::HTMLElement
14
- end
15
-
16
- it 'accepts index argument' do
17
- expect(browser.div(id: 'first_sibling').parent(index: 2).id).to eq 'grandparent'
18
- expect(browser.div(id: 'first_sibling').parent(index: 2)).to be_a Watir::HTMLElement
19
- end
20
-
21
- it 'accepts tag_name argument' do
22
- expect(browser.div(id: 'first_sibling').parent(tag_name: 'div').id).to eq 'parent'
23
- expect(browser.div(id: 'first_sibling').parent(tag_name: 'div')).to be_a Watir::Div
24
- end
25
-
26
- it 'accepts custom tag_name argument' do
27
- expect(browser.div(id: 'regular_child').parent(tag_name: 'grandelement').id).to eq 'custom_grandparent'
28
- expect(browser.div(id: 'regular_child').parent(tag_name: 'grandelement')).to be_a Watir::HTMLElement
29
- end
30
-
31
- it 'accepts class_name argument' do
32
- expect(browser.div(id: 'first_sibling').parent(class_name: 'parent').id).to eq 'parent_span'
33
- end
34
-
35
- it 'accepts index and tag_name arguments' do
36
- expect(browser.div(id: 'first_sibling').parent(tag_name: 'div', index: 1).id).to eq 'grandparent'
37
- expect(browser.div(id: 'first_sibling').parent(tag_name: 'div', index: 1)).to be_a Watir::Div
38
- end
39
-
40
- it 'does not error when no parent element of an index exists' do
41
- expect(browser.body.parent(index: 2)).to_not exist
42
- end
43
-
44
- it 'does not error when no parent element of a tag_name exists' do
45
- expect(browser.div(id: 'first_sibling').parent(tag_name: 'table')).to_not exist
46
- end
47
- end
48
-
49
- describe '#siblings' do
50
- it 'gets collection of all siblings of an element' do
51
- expect(browser.div(id: 'second_sibling').siblings).to be_a Watir::HTMLElementCollection
52
- expect(browser.div(id: 'second_sibling').siblings.size).to eq 5
53
- end
54
-
55
- it 'accepts a tag name argument' do
56
- siblings = browser.div(id: 'second_sibling').siblings(tag_name: 'div')
57
- expect(siblings.size).to eq 3
58
- expect(siblings.all?(Watir::Div)).to eq true
59
- end
60
-
61
- it 'accepts custom tag name argument' do
62
- siblings = browser.div(id: 'regular_child').siblings(tag_name: 'childelement')
63
- expect(siblings.size).to eq 3
64
- expect(siblings.all?(Watir::HTMLElement)).to eq true
65
- end
66
-
67
- it 'accepts a class_name argument' do
68
- siblings = browser.div(id: 'second_sibling').siblings(class_name: 'b')
69
- expect(siblings.first).to be_a Watir::Div
70
- expect(siblings[0]).to be_a Watir::Div
71
- expect(siblings.size).to eq 2
72
- expect(siblings.all?(Watir::Div)).to eq true
73
- end
74
- end
75
-
76
- describe '#following_sibling' do
77
- it 'gets immediate following sibling of an element by default' do
78
- expect(browser.div(id: 'first_sibling').following_sibling.id).to eq 'between_siblings1'
79
- expect(browser.div(id: 'first_sibling').following_sibling).to be_a Watir::HTMLElement
80
- end
81
-
82
- it 'accepts index argument' do
83
- expect(browser.div(id: 'first_sibling').following_sibling(index: 2).id).to eq 'between_siblings2'
84
- expect(browser.div(id: 'first_sibling').following_sibling(index: 2)).to be_a Watir::HTMLElement
85
- end
86
-
87
- it 'accepts tag_name argument' do
88
- expect(browser.div(id: 'first_sibling').following_sibling(tag_name: 'div').id).to eq 'second_sibling'
89
- expect(browser.div(id: 'first_sibling').following_sibling(tag_name: 'div')).to be_a Watir::Div
90
- end
91
-
92
- it 'accepts class_name argument' do
93
- expect(browser.div(id: 'first_sibling').following_sibling(class_name: 'b').id).to eq 'second_sibling'
94
- end
95
-
96
- it 'accepts index and tag_name arguments' do
97
- expect(browser.div(id: 'first_sibling').following_sibling(tag_name: 'div', index: 1).id).to eq 'third_sibling'
98
- expect(browser.div(id: 'first_sibling').following_sibling(tag_name: 'div', index: 1)).to be_a Watir::Div
99
- end
100
-
101
- it 'accepts text as Regexp' do
102
- expect(browser.div(id: 'first_sibling').following_sibling(text: /T/).id).to eq 'third_sibling'
103
- end
104
-
105
- it 'accepts text as String' do
106
- expect(browser.div(id: 'first_sibling').following_sibling(text: 'Third').id).to eq 'third_sibling'
107
- end
108
-
109
- it 'does not error when no next sibling of an index exists' do
110
- expect(browser.body.following_sibling(index: 1)).to_not exist
111
- end
112
-
113
- it 'does not error when no next sibling of a tag_name exists' do
114
- expect(browser.div(id: 'first_sibling').following_sibling(tag_name: 'table')).to_not exist
115
- end
116
- end
117
-
118
- describe '#following_siblings' do
119
- it 'gets collection of subsequent siblings of an element by default' do
120
- expect(browser.div(id: 'second_sibling').following_siblings).to be_a Watir::HTMLElementCollection
121
- expect(browser.div(id: 'second_sibling').following_siblings.size).to eq 2
122
- end
123
-
124
- it 'accepts tag_name argument' do
125
- expect(browser.div(id: 'second_sibling').following_siblings(tag_name: 'div').size).to eq 1
126
- expect(browser.div(id: 'second_sibling').following_siblings(tag_name: 'div').first).to be_a Watir::Div
127
- end
128
-
129
- it 'accepts class_name argument for single class' do
130
- expect(browser.div(id: 'second_sibling').following_siblings(class_name: 'b').size).to eq 1
131
- expect(browser.div(id: 'second_sibling').following_siblings(class_name: 'b').first).to be_a Watir::Div
132
- end
133
-
134
- it 'accepts class_name argument for multiple classes' do
135
- expect(browser.div(id: 'second_sibling').following_siblings(class_name: %w[a b]).size).to eq 1
136
- expect(browser.div(id: 'second_sibling').following_siblings(class_name: %w[a b]).first).to be_a Watir::Div
137
- end
138
- end
139
-
140
- describe '#previous_sibling' do
141
- it 'gets immediate preceeding sibling of an element by default' do
142
- expect(browser.div(id: 'third_sibling').previous_sibling.id).to eq 'between_siblings2'
143
- expect(browser.div(id: 'third_sibling').previous_sibling).to be_a Watir::HTMLElement
144
- end
145
-
146
- it 'accepts index argument' do
147
- expect(browser.div(id: 'third_sibling').previous_sibling(index: 2).id).to eq 'between_siblings1'
148
- expect(browser.div(id: 'third_sibling').previous_sibling(index: 2)).to be_a Watir::HTMLElement
149
- end
150
-
151
- it 'accepts tag_name argument' do
152
- expect(browser.div(id: 'third_sibling').previous_sibling(tag_name: 'div').id).to eq 'second_sibling'
153
- expect(browser.div(id: 'third_sibling').previous_sibling(tag_name: 'div')).to be_a Watir::Div
154
- end
155
-
156
- it 'accepts class_name argument' do
157
- expect(browser.div(id: 'third_sibling').previous_sibling(class_name: 'a').id).to eq 'between_siblings2'
158
- end
159
-
160
- it 'accepts index and tag_name arguments' do
161
- expect(browser.div(id: 'third_sibling').previous_sibling(tag_name: 'div', index: 1).id).to eq 'first_sibling'
162
- expect(browser.div(id: 'third_sibling').previous_sibling(tag_name: 'div', index: 1)).to be_a Watir::Div
163
- end
164
-
165
- it 'does not error when no next sibling of an index exists' do
166
- expect(browser.body.previous_sibling(index: 1)).to_not exist
167
- end
168
-
169
- it 'does not error when no next sibling of a tag_name exists' do
170
- expect(browser.div(id: 'third_sibling').previous_sibling(tag_name: 'table')).to_not exist
171
- end
172
- end
173
-
174
- describe '#previous_siblings' do
175
- it 'gets collection of previous siblings of an element by default' do
176
- expect(browser.div(id: 'second_sibling').previous_siblings).to be_a Watir::HTMLElementCollection
177
- expect(browser.div(id: 'second_sibling').previous_siblings.size).to eq 2
178
- end
179
-
180
- it 'accepts tag_name argument' do
181
- expect(browser.div(id: 'second_sibling').previous_siblings(tag_name: 'div').size).to eq 1
182
- expect(browser.div(id: 'second_sibling').previous_siblings(tag_name: 'div').first).to be_a Watir::Div
183
- end
184
-
185
- it 'accepts class_name argument' do
186
- expect(browser.div(id: 'second_sibling').previous_siblings(class_name: 'a').size).to eq 1
187
- expect(browser.div(id: 'second_sibling').previous_siblings(class_name: 'a').first.id).to eq 'between_siblings1'
188
- end
189
- end
190
-
191
- describe '#child' do
192
- it 'gets immediate child of an element by default' do
193
- expect(browser.div(id: 'parent').child.id).to eq 'first_sibling'
194
- expect(browser.div(id: 'parent').child).to be_a Watir::HTMLElement
195
- end
196
-
197
- it 'accepts index argument' do
198
- expect(browser.div(id: 'parent').child(index: 2).id).to eq 'second_sibling'
199
- expect(browser.div(id: 'parent').child(index: 2)).to be_a Watir::HTMLElement
200
- end
201
-
202
- it 'accepts tag_name argument' do
203
- expect(browser.div(id: 'parent').child(tag_name: 'span').id).to eq 'between_siblings1'
204
- expect(browser.div(id: 'parent').child(tag_name: 'span')).to be_a Watir::Span
205
- end
206
-
207
- it 'accepts custom tag_name argument' do
208
- expect(browser.element(id: 'custom_parent').child(tag_name: 'childelement').id).to eq 'custom_child'
209
- expect(browser.element(id: 'custom_parent').child(tag_name: 'childelement')).to be_a Watir::HTMLElement
210
- end
211
-
212
- it 'accepts class_name argument' do
213
- expect(browser.div(id: 'parent').child(class_name: 'b').id).to eq 'second_sibling'
214
- end
215
-
216
- it 'accepts index and tag_name arguments' do
217
- expect(browser.div(id: 'parent').child(tag_name: 'div', index: 1).id).to eq 'second_sibling'
218
- expect(browser.div(id: 'parent').child(tag_name: 'div', index: 1)).to be_a Watir::Div
219
- end
220
-
221
- it 'does not error when no next sibling of an index exists' do
222
- expect(browser.div(id: 'second_sibling').child(index: 1)).to_not exist
223
- end
224
-
225
- it 'does not error when no next sibling of a tag_name exists' do
226
- expect(browser.div(id: 'parent').child(tag_name: 'table')).to_not exist
227
- end
228
- end
229
-
230
- describe '#children' do
231
- it 'gets collection of children of an element by default' do
232
- expect(browser.div(id: 'parent').children).to be_a Watir::HTMLElementCollection
233
- expect(browser.div(id: 'parent').children.size).to eq 5
234
- end
235
-
236
- it 'accepts tag_name argument' do
237
- children = browser.div(id: 'parent').children(tag_name: 'div')
238
- expect(children.size).to eq 3
239
- expect(children.all?(Watir::Div)).to eq true
240
- end
241
-
242
- it 'accepts custom tag_name argument' do
243
- children = browser.element(id: 'custom_parent').children(tag_name: 'childelement')
244
- expect(children.size).to eq 3
245
- expect(children.all?(Watir::HTMLElement)).to eq true
246
- end
247
-
248
- it 'accepts a class_name argument' do
249
- children = browser.div(id: 'parent').children(class_name: 'b')
250
- expect(children.size).to eq 2
251
- expect(children.all?(Watir::Div)).to eq true
5
+ module Watir
6
+ describe Element do
7
+ before(:all) do
8
+ browser.goto(WatirSpec.url_for('nested_elements.html'))
9
+ end
10
+
11
+ describe '#parent' do
12
+ it 'gets immediate parent of an element by default' do
13
+ expect(browser.div(id: 'first_sibling').parent.id).to eq 'parent'
14
+ expect(browser.div(id: 'first_sibling').parent).to be_a Watir::HTMLElement
15
+ end
16
+
17
+ it 'accepts index argument' do
18
+ expect(browser.div(id: 'first_sibling').parent(index: 2).id).to eq 'grandparent'
19
+ expect(browser.div(id: 'first_sibling').parent(index: 2)).to be_a Watir::HTMLElement
20
+ end
21
+
22
+ it 'accepts tag_name argument' do
23
+ expect(browser.div(id: 'first_sibling').parent(tag_name: 'div').id).to eq 'parent'
24
+ expect(browser.div(id: 'first_sibling').parent(tag_name: 'div')).to be_a Watir::Div
25
+ end
26
+
27
+ it 'accepts custom tag_name argument' do
28
+ expect(browser.div(id: 'regular_child').parent(tag_name: 'grandelement').id).to eq 'custom_grandparent'
29
+ expect(browser.div(id: 'regular_child').parent(tag_name: 'grandelement')).to be_a Watir::HTMLElement
30
+ end
31
+
32
+ it 'accepts class_name argument' do
33
+ expect(browser.div(id: 'first_sibling').parent(class_name: 'parent').id).to eq 'parent_span'
34
+ end
35
+
36
+ it 'accepts index and tag_name arguments' do
37
+ expect(browser.div(id: 'first_sibling').parent(tag_name: 'div', index: 1).id).to eq 'grandparent'
38
+ expect(browser.div(id: 'first_sibling').parent(tag_name: 'div', index: 1)).to be_a Watir::Div
39
+ end
40
+
41
+ it 'does not error when no parent element of an index exists' do
42
+ expect(browser.body.parent(index: 2)).not_to exist
43
+ end
44
+
45
+ it 'does not error when no parent element of a tag_name exists' do
46
+ expect(browser.div(id: 'first_sibling').parent(tag_name: 'table')).not_to exist
47
+ end
48
+ end
49
+
50
+ describe '#siblings' do
51
+ it 'gets collection of all siblings of an element' do
52
+ expect(browser.div(id: 'second_sibling').siblings).to be_a Watir::HTMLElementCollection
53
+ expect(browser.div(id: 'second_sibling').siblings.size).to eq 5
54
+ end
55
+
56
+ it 'accepts a tag name argument' do
57
+ siblings = browser.div(id: 'second_sibling').siblings(tag_name: 'div')
58
+ expect(siblings.size).to eq 3
59
+ expect(siblings.all?(Watir::Div)).to be true
60
+ end
61
+
62
+ it 'accepts custom tag name argument' do
63
+ siblings = browser.div(id: 'regular_child').siblings(tag_name: 'childelement')
64
+ expect(siblings.size).to eq 3
65
+ expect(siblings.all?(Watir::HTMLElement)).to be true
66
+ end
67
+
68
+ it 'accepts a class_name argument' do
69
+ siblings = browser.div(id: 'second_sibling').siblings(class_name: 'b')
70
+ expect(siblings.first).to be_a Watir::Div
71
+ expect(siblings[0]).to be_a Watir::Div
72
+ expect(siblings.size).to eq 2
73
+ expect(siblings.all?(Watir::Div)).to be true
74
+ end
75
+ end
76
+
77
+ describe '#following_sibling' do
78
+ it 'gets immediate following sibling of an element by default' do
79
+ expect(browser.div(id: 'first_sibling').following_sibling.id).to eq 'between_siblings1'
80
+ expect(browser.div(id: 'first_sibling').following_sibling).to be_a Watir::HTMLElement
81
+ end
82
+
83
+ it 'accepts index argument' do
84
+ expect(browser.div(id: 'first_sibling').following_sibling(index: 2).id).to eq 'between_siblings2'
85
+ expect(browser.div(id: 'first_sibling').following_sibling(index: 2)).to be_a Watir::HTMLElement
86
+ end
87
+
88
+ it 'accepts tag_name argument' do
89
+ expect(browser.div(id: 'first_sibling').following_sibling(tag_name: 'div').id).to eq 'second_sibling'
90
+ expect(browser.div(id: 'first_sibling').following_sibling(tag_name: 'div')).to be_a Watir::Div
91
+ end
92
+
93
+ it 'accepts class_name argument' do
94
+ expect(browser.div(id: 'first_sibling').following_sibling(class_name: 'b').id).to eq 'second_sibling'
95
+ end
96
+
97
+ it 'accepts index and tag_name arguments' do
98
+ expect(browser.div(id: 'first_sibling').following_sibling(tag_name: 'div', index: 1).id).to eq 'third_sibling'
99
+ expect(browser.div(id: 'first_sibling').following_sibling(tag_name: 'div', index: 1)).to be_a Watir::Div
100
+ end
101
+
102
+ it 'accepts text as Regexp' do
103
+ expect(browser.div(id: 'first_sibling').following_sibling(text: /T/).id).to eq 'third_sibling'
104
+ end
105
+
106
+ it 'accepts text as String' do
107
+ expect(browser.div(id: 'first_sibling').following_sibling(text: 'Third').id).to eq 'third_sibling'
108
+ end
109
+
110
+ it 'does not error when no next sibling of an index exists' do
111
+ expect(browser.body.following_sibling(index: 1)).not_to exist
112
+ end
113
+
114
+ it 'does not error when no next sibling of a tag_name exists' do
115
+ expect(browser.div(id: 'first_sibling').following_sibling(tag_name: 'table')).not_to exist
116
+ end
117
+ end
118
+
119
+ describe '#following_siblings' do
120
+ it 'gets collection of subsequent siblings of an element by default' do
121
+ expect(browser.div(id: 'second_sibling').following_siblings).to be_a Watir::HTMLElementCollection
122
+ expect(browser.div(id: 'second_sibling').following_siblings.size).to eq 2
123
+ end
124
+
125
+ it 'accepts tag_name argument' do
126
+ expect(browser.div(id: 'second_sibling').following_siblings(tag_name: 'div').size).to eq 1
127
+ expect(browser.div(id: 'second_sibling').following_siblings(tag_name: 'div').first).to be_a Watir::Div
128
+ end
129
+
130
+ it 'accepts class_name argument for single class' do
131
+ expect(browser.div(id: 'second_sibling').following_siblings(class_name: 'b').size).to eq 1
132
+ expect(browser.div(id: 'second_sibling').following_siblings(class_name: 'b').first).to be_a Watir::Div
133
+ end
134
+
135
+ it 'accepts class_name argument for multiple classes' do
136
+ expect(browser.div(id: 'second_sibling').following_siblings(class_name: %w[a b]).size).to eq 1
137
+ expect(browser.div(id: 'second_sibling').following_siblings(class_name: %w[a b]).first).to be_a Watir::Div
138
+ end
139
+ end
140
+
141
+ describe '#previous_sibling' do
142
+ it 'gets immediate preceeding sibling of an element by default' do
143
+ expect(browser.div(id: 'third_sibling').previous_sibling.id).to eq 'between_siblings2'
144
+ expect(browser.div(id: 'third_sibling').previous_sibling).to be_a Watir::HTMLElement
145
+ end
146
+
147
+ it 'accepts index argument' do
148
+ expect(browser.div(id: 'third_sibling').previous_sibling(index: 2).id).to eq 'between_siblings1'
149
+ expect(browser.div(id: 'third_sibling').previous_sibling(index: 2)).to be_a Watir::HTMLElement
150
+ end
151
+
152
+ it 'accepts tag_name argument' do
153
+ expect(browser.div(id: 'third_sibling').previous_sibling(tag_name: 'div').id).to eq 'second_sibling'
154
+ expect(browser.div(id: 'third_sibling').previous_sibling(tag_name: 'div')).to be_a Watir::Div
155
+ end
156
+
157
+ it 'accepts class_name argument' do
158
+ expect(browser.div(id: 'third_sibling').previous_sibling(class_name: 'a').id).to eq 'between_siblings2'
159
+ end
160
+
161
+ it 'accepts index and tag_name arguments' do
162
+ expect(browser.div(id: 'third_sibling').previous_sibling(tag_name: 'div', index: 1).id).to eq 'first_sibling'
163
+ expect(browser.div(id: 'third_sibling').previous_sibling(tag_name: 'div', index: 1)).to be_a Watir::Div
164
+ end
165
+
166
+ it 'does not error when no next sibling of an index exists' do
167
+ expect(browser.body.previous_sibling(index: 1)).not_to exist
168
+ end
169
+
170
+ it 'does not error when no next sibling of a tag_name exists' do
171
+ expect(browser.div(id: 'third_sibling').previous_sibling(tag_name: 'table')).not_to exist
172
+ end
173
+ end
174
+
175
+ describe '#previous_siblings' do
176
+ it 'gets collection of previous siblings of an element by default' do
177
+ expect(browser.div(id: 'second_sibling').previous_siblings).to be_a Watir::HTMLElementCollection
178
+ expect(browser.div(id: 'second_sibling').previous_siblings.size).to eq 2
179
+ end
180
+
181
+ it 'accepts tag_name argument' do
182
+ expect(browser.div(id: 'second_sibling').previous_siblings(tag_name: 'div').size).to eq 1
183
+ expect(browser.div(id: 'second_sibling').previous_siblings(tag_name: 'div').first).to be_a Watir::Div
184
+ end
185
+
186
+ it 'accepts class_name argument' do
187
+ expect(browser.div(id: 'second_sibling').previous_siblings(class_name: 'a').size).to eq 1
188
+ expect(browser.div(id: 'second_sibling').previous_siblings(class_name: 'a').first.id).to eq 'between_siblings1'
189
+ end
190
+ end
191
+
192
+ describe '#child' do
193
+ it 'gets immediate child of an element by default' do
194
+ expect(browser.div(id: 'parent').child.id).to eq 'first_sibling'
195
+ expect(browser.div(id: 'parent').child).to be_a Watir::HTMLElement
196
+ end
197
+
198
+ it 'accepts index argument' do
199
+ expect(browser.div(id: 'parent').child(index: 2).id).to eq 'second_sibling'
200
+ expect(browser.div(id: 'parent').child(index: 2)).to be_a Watir::HTMLElement
201
+ end
202
+
203
+ it 'accepts tag_name argument' do
204
+ expect(browser.div(id: 'parent').child(tag_name: 'span').id).to eq 'between_siblings1'
205
+ expect(browser.div(id: 'parent').child(tag_name: 'span')).to be_a Watir::Span
206
+ end
207
+
208
+ it 'accepts custom tag_name argument' do
209
+ expect(browser.element(id: 'custom_parent').child(tag_name: 'childelement').id).to eq 'custom_child'
210
+ expect(browser.element(id: 'custom_parent').child(tag_name: 'childelement')).to be_a Watir::HTMLElement
211
+ end
212
+
213
+ it 'accepts class_name argument' do
214
+ expect(browser.div(id: 'parent').child(class_name: 'b').id).to eq 'second_sibling'
215
+ end
216
+
217
+ it 'accepts index and tag_name arguments' do
218
+ expect(browser.div(id: 'parent').child(tag_name: 'div', index: 1).id).to eq 'second_sibling'
219
+ expect(browser.div(id: 'parent').child(tag_name: 'div', index: 1)).to be_a Watir::Div
220
+ end
221
+
222
+ it 'does not error when no next sibling of an index exists' do
223
+ expect(browser.div(id: 'second_sibling').child(index: 1)).not_to exist
224
+ end
225
+
226
+ it 'does not error when no next sibling of a tag_name exists' do
227
+ expect(browser.div(id: 'parent').child(tag_name: 'table')).not_to exist
228
+ end
229
+ end
230
+
231
+ describe '#children' do
232
+ it 'gets collection of children of an element by default' do
233
+ expect(browser.div(id: 'parent').children).to be_a Watir::HTMLElementCollection
234
+ expect(browser.div(id: 'parent').children.size).to eq 5
235
+ end
236
+
237
+ it 'accepts tag_name argument' do
238
+ children = browser.div(id: 'parent').children(tag_name: 'div')
239
+ expect(children.size).to eq 3
240
+ expect(children.all?(Watir::Div)).to be true
241
+ end
242
+
243
+ it 'accepts custom tag_name argument' do
244
+ children = browser.element(id: 'custom_parent').children(tag_name: 'childelement')
245
+ expect(children.size).to eq 3
246
+ expect(children.all?(Watir::HTMLElement)).to be true
247
+ end
248
+
249
+ it 'accepts a class_name argument' do
250
+ children = browser.div(id: 'parent').children(class_name: 'b')
251
+ expect(children.size).to eq 2
252
+ expect(children.all?(Watir::Div)).to be true
253
+ end
252
254
  end
253
255
  end
254
256
  end