watir 7.2.0 → 7.3.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 (149) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/chrome.yml +9 -1
  3. data/.github/workflows/edge.yml +10 -2
  4. data/.github/workflows/firefox.yml +10 -2
  5. data/.github/workflows/ie.yml +1 -1
  6. data/.github/workflows/safari.yml +1 -1
  7. data/.github/workflows/unit.yml +3 -3
  8. data/.rubocop.yml +36 -14
  9. data/.rubocop_todo.yml +8 -1
  10. data/CHANGES.md +17 -1
  11. data/LICENSE +2 -2
  12. data/lib/watir/capabilities.rb +2 -12
  13. data/lib/watir/cookies.rb +7 -2
  14. data/lib/watir/elements/date_field.rb +2 -2
  15. data/lib/watir/elements/date_time_field.rb +2 -2
  16. data/lib/watir/elements/select.rb +3 -3
  17. data/lib/watir/locators/anchor/selector_builder.rb +3 -0
  18. data/lib/watir/locators/element/matcher.rb +2 -1
  19. data/lib/watir/locators/element/selector_builder/regexp_disassembler.rb +2 -1
  20. data/lib/watir/locators/element/selector_builder.rb +1 -1
  21. data/lib/watir/locators/text_field/matcher.rb +1 -5
  22. data/lib/watir/version.rb +1 -1
  23. data/lib/watir.rb +1 -0
  24. data/lib/watirspec/implementation.rb +1 -1
  25. data/lib/watirspec.rb +1 -1
  26. data/spec/locator_spec_helper.rb +3 -15
  27. data/spec/unit/capabilities_spec.rb +552 -561
  28. data/spec/unit/element_locator_spec.rb +89 -78
  29. data/spec/unit/match_elements/button_spec.rb +69 -62
  30. data/spec/unit/match_elements/element_spec.rb +303 -309
  31. data/spec/unit/match_elements/text_field_spec.rb +76 -73
  32. data/spec/unit/selector_builder/anchor_spec.rb +39 -33
  33. data/spec/unit/selector_builder/button_spec.rb +209 -202
  34. data/spec/unit/selector_builder/cell_spec.rb +48 -42
  35. data/spec/unit/selector_builder/element_spec.rb +632 -627
  36. data/spec/unit/selector_builder/row_spec.rb +119 -113
  37. data/spec/unit/selector_builder/text_field_spec.rb +195 -188
  38. data/spec/unit/selector_builder/textarea_spec.rb +22 -14
  39. data/spec/unit/wait_spec.rb +85 -81
  40. data/spec/watirspec/adjacent_spec.rb +249 -247
  41. data/spec/watirspec/after_hooks_spec.rb +161 -159
  42. data/spec/watirspec/alert_spec.rb +61 -58
  43. data/spec/watirspec/browser_spec.rb +411 -409
  44. data/spec/watirspec/capabilities_spec.rb +99 -112
  45. data/spec/watirspec/cookies_spec.rb +144 -115
  46. data/spec/watirspec/drag_and_drop_spec.rb +26 -24
  47. data/spec/watirspec/element_hidden_spec.rb +66 -60
  48. data/spec/watirspec/elements/area_spec.rb +49 -47
  49. data/spec/watirspec/elements/areas_spec.rb +27 -25
  50. data/spec/watirspec/elements/button_spec.rb +253 -251
  51. data/spec/watirspec/elements/buttons_spec.rb +36 -34
  52. data/spec/watirspec/elements/checkbox_spec.rb +48 -36
  53. data/spec/watirspec/elements/checkboxes_spec.rb +29 -27
  54. data/spec/watirspec/elements/collections_spec.rb +126 -119
  55. data/spec/watirspec/elements/date_field_spec.rb +202 -183
  56. data/spec/watirspec/elements/date_fields_spec.rb +29 -27
  57. data/spec/watirspec/elements/date_time_field_spec.rb +216 -195
  58. data/spec/watirspec/elements/date_time_fields_spec.rb +30 -28
  59. data/spec/watirspec/elements/dd_spec.rb +87 -85
  60. data/spec/watirspec/elements/dds_spec.rb +27 -25
  61. data/spec/watirspec/elements/del_spec.rb +106 -104
  62. data/spec/watirspec/elements/dels_spec.rb +26 -24
  63. data/spec/watirspec/elements/div_spec.rb +225 -221
  64. data/spec/watirspec/elements/divs_spec.rb +37 -35
  65. data/spec/watirspec/elements/dl_spec.rb +110 -108
  66. data/spec/watirspec/elements/dls_spec.rb +28 -26
  67. data/spec/watirspec/elements/dt_spec.rb +86 -84
  68. data/spec/watirspec/elements/dts_spec.rb +27 -25
  69. data/spec/watirspec/elements/element_spec.rb +794 -775
  70. data/spec/watirspec/elements/elements_spec.rb +40 -38
  71. data/spec/watirspec/elements/em_spec.rb +62 -60
  72. data/spec/watirspec/elements/ems_spec.rb +28 -26
  73. data/spec/watirspec/elements/filefield_spec.rb +116 -114
  74. data/spec/watirspec/elements/filefields_spec.rb +28 -26
  75. data/spec/watirspec/elements/font_spec.rb +20 -18
  76. data/spec/watirspec/elements/form_spec.rb +51 -49
  77. data/spec/watirspec/elements/forms_spec.rb +29 -27
  78. data/spec/watirspec/elements/frame_spec.rb +89 -87
  79. data/spec/watirspec/elements/frames_spec.rb +27 -25
  80. data/spec/watirspec/elements/hidden_spec.rb +81 -79
  81. data/spec/watirspec/elements/hiddens_spec.rb +28 -26
  82. data/spec/watirspec/elements/hn_spec.rb +59 -57
  83. data/spec/watirspec/elements/hns_spec.rb +26 -24
  84. data/spec/watirspec/elements/iframe_spec.rb +195 -191
  85. data/spec/watirspec/elements/iframes_spec.rb +31 -29
  86. data/spec/watirspec/elements/image_spec.rb +148 -146
  87. data/spec/watirspec/elements/images_spec.rb +26 -24
  88. data/spec/watirspec/elements/input_spec.rb +9 -7
  89. data/spec/watirspec/elements/ins_spec.rb +106 -104
  90. data/spec/watirspec/elements/inses_spec.rb +26 -24
  91. data/spec/watirspec/elements/label_spec.rb +56 -54
  92. data/spec/watirspec/elements/labels_spec.rb +26 -24
  93. data/spec/watirspec/elements/li_spec.rb +76 -74
  94. data/spec/watirspec/elements/link_spec.rb +173 -177
  95. data/spec/watirspec/elements/links_spec.rb +45 -43
  96. data/spec/watirspec/elements/lis_spec.rb +27 -25
  97. data/spec/watirspec/elements/list_spec.rb +44 -42
  98. data/spec/watirspec/elements/map_spec.rb +57 -55
  99. data/spec/watirspec/elements/maps_spec.rb +27 -25
  100. data/spec/watirspec/elements/meta_spec.rb +16 -14
  101. data/spec/watirspec/elements/metas_spec.rb +26 -24
  102. data/spec/watirspec/elements/ol_spec.rb +56 -65
  103. data/spec/watirspec/elements/ols_spec.rb +26 -24
  104. data/spec/watirspec/elements/option_spec.rb +91 -89
  105. data/spec/watirspec/elements/p_spec.rb +81 -79
  106. data/spec/watirspec/elements/pre_spec.rb +77 -75
  107. data/spec/watirspec/elements/pres_spec.rb +26 -24
  108. data/spec/watirspec/elements/ps_spec.rb +26 -24
  109. data/spec/watirspec/elements/radio_spec.rb +251 -249
  110. data/spec/watirspec/elements/radios_spec.rb +28 -26
  111. data/spec/watirspec/elements/select_list_spec.rb +537 -526
  112. data/spec/watirspec/elements/select_lists_spec.rb +32 -30
  113. data/spec/watirspec/elements/span_spec.rb +112 -110
  114. data/spec/watirspec/elements/spans_spec.rb +26 -24
  115. data/spec/watirspec/elements/strong_spec.rb +58 -58
  116. data/spec/watirspec/elements/strongs_spec.rb +28 -26
  117. data/spec/watirspec/elements/table_spec.rb +192 -139
  118. data/spec/watirspec/elements/tables_spec.rb +28 -26
  119. data/spec/watirspec/elements/tbody_spec.rb +74 -72
  120. data/spec/watirspec/elements/tbodys_spec.rb +40 -38
  121. data/spec/watirspec/elements/td_spec.rb +66 -64
  122. data/spec/watirspec/elements/tds_spec.rb +41 -39
  123. data/spec/watirspec/elements/text_field_spec.rb +206 -204
  124. data/spec/watirspec/elements/text_fields_spec.rb +30 -28
  125. data/spec/watirspec/elements/textarea_spec.rb +20 -18
  126. data/spec/watirspec/elements/textareas_spec.rb +18 -16
  127. data/spec/watirspec/elements/tfoot_spec.rb +65 -63
  128. data/spec/watirspec/elements/tfoots_spec.rb +42 -40
  129. data/spec/watirspec/elements/thead_spec.rb +65 -63
  130. data/spec/watirspec/elements/theads_spec.rb +42 -40
  131. data/spec/watirspec/elements/tr_spec.rb +48 -46
  132. data/spec/watirspec/elements/trs_spec.rb +42 -40
  133. data/spec/watirspec/elements/ul_spec.rb +56 -54
  134. data/spec/watirspec/elements/uls_spec.rb +26 -24
  135. data/spec/watirspec/radio_set_spec.rb +269 -267
  136. data/spec/watirspec/screenshot_spec.rb +20 -18
  137. data/spec/watirspec/scroll_spec.rb +152 -148
  138. data/spec/watirspec/shadow_root_spec.rb +88 -83
  139. data/spec/watirspec/support/rspec_matchers.rb +34 -25
  140. data/spec/watirspec/user_editable_spec.rb +200 -198
  141. data/spec/watirspec/wait_spec.rb +289 -295
  142. data/spec/watirspec/window_switching_spec.rb +423 -434
  143. data/spec/watirspec_helper.rb +1 -23
  144. data/watir.gemspec +6 -5
  145. metadata +47 -37
  146. data/spec/watirspec/attributes_spec.rb +0 -18
  147. data/spec/watirspec/elements/table_nesting_spec.rb +0 -51
  148. data/spec/watirspec/special_chars_spec.rb +0 -23
  149. data/support/travis.sh +0 -15
@@ -2,166 +2,195 @@
2
2
 
3
3
  require 'watirspec_helper'
4
4
 
5
- describe 'Browser#cookies' do
6
- after { browser.cookies.clear }
5
+ module Watir
6
+ describe Cookies do
7
+ after { browser.cookies.clear }
7
8
 
8
- it 'gets an empty list of cookies' do
9
- browser.goto WatirSpec.url_for 'index.html'
10
- expect(browser.cookies.to_a).to eq []
11
- end
12
-
13
- it 'gets any cookies set' do
14
- browser.goto set_cookie_url
15
-
16
- verify_cookies_count 1
17
-
18
- cookie = browser.cookies.to_a.first
19
- expect(cookie[:name]).to eq 'monster'
20
- expect(cookie[:value]).to eq '1'
21
- end
9
+ it 'gets an empty list of cookies' do
10
+ browser.goto WatirSpec.url_for 'index.html'
11
+ expect(browser.cookies.to_a).to eq []
12
+ end
22
13
 
23
- describe '#[]' do
24
- before do
14
+ it 'gets any cookies set' do
25
15
  browser.goto set_cookie_url
16
+
26
17
  verify_cookies_count 1
27
- end
28
18
 
29
- it 'returns cookie by symbol name' do
30
- cookie = browser.cookies[:monster]
31
- expect(cookie[:name]).to eq('monster')
32
- expect(cookie[:value]).to eq('1')
19
+ cookie = browser.cookies.to_a.first
20
+ expect(cookie[:name]).to eq 'monster'
21
+ expect(cookie[:value]).to eq '1'
33
22
  end
34
23
 
35
- it 'returns cookie by string name' do
36
- cookie = browser.cookies['monster']
37
- expect(cookie[:name]).to eq('monster')
38
- expect(cookie[:value]).to eq('1')
24
+ describe '#[]' do
25
+ before do
26
+ browser.goto set_cookie_url
27
+ verify_cookies_count 1
28
+ end
29
+
30
+ it 'returns cookie by symbol name' do
31
+ cookie = browser.cookies[:monster]
32
+ expect(cookie[:name]).to eq('monster')
33
+ expect(cookie[:value]).to eq('1')
34
+ end
35
+
36
+ it 'returns cookie by string name' do
37
+ cookie = browser.cookies['monster']
38
+ expect(cookie[:name]).to eq('monster')
39
+ expect(cookie[:value]).to eq('1')
40
+ end
41
+
42
+ it 'returns nil if there is no cookie with such name' do
43
+ expect(browser.cookies[:non_monster]).to be_nil
44
+ end
39
45
  end
40
46
 
41
- it 'returns nil if there is no cookie with such name' do
42
- expect(browser.cookies[:non_monster]).to eq(nil)
47
+ it 'adds a cookie without options' do
48
+ browser.goto WatirSpec.url_for 'index.html'
49
+ verify_cookies_count 0
50
+
51
+ browser.cookies.add 'foo', 'bar'
52
+ verify_cookies_count 1
43
53
  end
44
- end
45
54
 
46
- it 'adds a cookie without options' do
47
- browser.goto WatirSpec.url_for 'index.html'
48
- verify_cookies_count 0
55
+ it 'adds a cookie with a string expires value' do
56
+ browser.goto WatirSpec.url_for 'index.html'
49
57
 
50
- browser.cookies.add 'foo', 'bar'
51
- verify_cookies_count 1
52
- end
58
+ expire_time = ::Time.now + 10_000
53
59
 
54
- it 'adds a cookie with a string expires value' do
55
- browser.goto WatirSpec.url_for 'index.html'
60
+ browser.cookies.add 'foo', 'bar', expires: expire_time.to_s
56
61
 
57
- expire_time = Time.now + 10_000
62
+ cookie = browser.cookies[:foo]
63
+ expect(cookie[:expires]).to be_a(::Time)
64
+ end
58
65
 
59
- browser.cookies.add 'foo', 'bar', expires: expire_time.to_s
66
+ it 'adds a cookie with path',
67
+ except: {browser: :ie, reason: 'path contains two slashes'} do
68
+ browser.goto WatirSpec.url_for 'index.html'
60
69
 
61
- cookie = browser.cookies[:foo]
62
- expect(cookie[:expires]).to be_kind_of(Time)
63
- end
70
+ options = {path: '/set_cookie'}
71
+ browser.cookies.add 'path', 'b', options
64
72
 
65
- it 'adds a cookie with path',
66
- except: {browser: :ie, reason: 'path contains two slashes'} do
67
- browser.goto WatirSpec.url_for 'index.html'
73
+ expect(browser.cookies.to_a).to be_empty
68
74
 
69
- options = {path: '/set_cookie'}
70
- browser.cookies.add 'path', 'b', options
75
+ browser.goto set_cookie_url
76
+ cookie = browser.cookies.to_a.find { |e| e[:name] == 'path' }
71
77
 
72
- expect(browser.cookies.to_a).to be_empty
78
+ expect(cookie[:name]).to eq 'path'
79
+ expect(cookie[:value]).to eq 'b'
80
+ expect(cookie[:path]).to eq '/set_cookie'
81
+ end
73
82
 
74
- browser.goto set_cookie_url
75
- cookie = browser.cookies.to_a.find { |e| e[:name] == 'path' }
83
+ it 'adds a cookie with samesite value' do
84
+ browser.goto WatirSpec.url_for 'index.html'
76
85
 
77
- expect(cookie[:name]).to eq 'path'
78
- expect(cookie[:value]).to eq 'b'
79
- expect(cookie[:path]).to eq '/set_cookie'
80
- end
86
+ options = {same_site: 'Strict'}
87
+ browser.cookies.add 'samesite', 'strict', options
81
88
 
82
- it 'adds a cookie with expiration' do
83
- browser.goto WatirSpec.url_for 'index.html'
89
+ cookie = browser.cookies.to_a.find { |e| e[:name] == 'samesite' }
84
90
 
85
- expires = Time.now + 10_000
86
- options = {expires: expires}
91
+ expect(cookie[:name]).to eq 'samesite'
92
+ expect(cookie[:value]).to eq 'strict'
93
+ expect(cookie[:same_site]).to eq 'Strict'
94
+ end
87
95
 
88
- browser.cookies.add 'expiration', 'b', options
89
- cookie = browser.cookies.to_a.first
96
+ it 'adds a cookie with httponly value' do
97
+ browser.goto WatirSpec.url_for 'index.html'
90
98
 
91
- expect(cookie[:name]).to eq 'expiration'
92
- expect(cookie[:value]).to eq 'b'
99
+ options = {http_only: true}
100
+ browser.cookies.add 'httponly', 'true', options
93
101
 
94
- expect((cookie[:expires]).to_i).to be_within(2).of(expires.to_i)
95
- end
102
+ cookie = browser.cookies.to_a.find { |e| e[:name] == 'httponly' }
103
+
104
+ expect(cookie[:name]).to eq 'httponly'
105
+ expect(cookie[:value]).to eq 'true'
106
+ expect(cookie[:http_only]).to be true
107
+ expect(browser.execute_script('return document.cookie')).to be_empty
108
+ end
96
109
 
97
- # Pending resolution of https://github.com/w3c/webdriver/issues/1571
98
- it 'adding cookie with security does not raise exception but can not be retrieved',
99
- except: [{browser: :firefox,
100
- reason: 'https://github.com/mozilla/geckodriver/issues/1840'},
101
- {browser: %i[chrome edge], platform: :windows}] do
102
- browser.goto WatirSpec.url_for 'index.html'
110
+ it 'adds a cookie with expiration' do
111
+ browser.goto WatirSpec.url_for 'index.html'
103
112
 
104
- options = {secure: true}
113
+ expires = ::Time.now + 10_000
114
+ options = {expires: expires}
105
115
 
106
- browser.cookies.add 'secure', 'b', options
107
- cookie = browser.cookies.to_a.find { |e| e[:name] == 'secure' }
108
- expect(cookie).to be_nil
109
- end
116
+ browser.cookies.add 'expiration', 'b', options
117
+ cookie = browser.cookies.to_a.first
110
118
 
111
- it 'removes a cookie' do
112
- browser.goto set_cookie_url
113
- verify_cookies_count 1
119
+ expect(cookie[:name]).to eq 'expiration'
120
+ expect(cookie[:value]).to eq 'b'
114
121
 
115
- browser.cookies.delete 'monster'
116
- verify_cookies_count 0
117
- end
122
+ expect((cookie[:expires]).to_i).to be_within(2).of(expires.to_i)
123
+ end
118
124
 
119
- it 'clears all cookies' do
120
- browser.goto set_cookie_url
121
- browser.cookies.add 'foo', 'bar'
122
- verify_cookies_count 2
125
+ # Pending resolution of https://github.com/w3c/webdriver/issues/1571
126
+ it 'adding cookie with security does not raise exception but can not be retrieved',
127
+ except: [{browser: :firefox,
128
+ reason: 'https://github.com/mozilla/geckodriver/issues/1840'},
129
+ {browser: %i[chrome edge], platform: :windows}] do
130
+ browser.goto WatirSpec.url_for 'index.html'
123
131
 
124
- browser.cookies.clear
125
- verify_cookies_count 0
126
- end
132
+ options = {secure: true}
127
133
 
128
- context 'cookie file' do
129
- let(:file) { "#{Dir.tmpdir}/cookies" }
134
+ browser.cookies.add 'secure', 'b', options
135
+ cookie = browser.cookies.to_a.find { |e| e[:name] == 'secure' }
136
+ expect(cookie).to be_nil
137
+ end
130
138
 
131
- before do
139
+ it 'removes a cookie' do
132
140
  browser.goto set_cookie_url
133
- browser.cookies.save file
141
+ verify_cookies_count 1
142
+
143
+ browser.cookies.delete 'monster'
144
+ verify_cookies_count 0
134
145
  end
135
146
 
136
- describe '#save' do
137
- it 'saves cookies to file' do
138
- expect(File.read(file)).to eq(browser.cookies.to_a.to_yaml)
139
- end
147
+ it 'clears all cookies' do
148
+ browser.goto set_cookie_url
149
+ browser.cookies.add 'foo', 'bar'
150
+ verify_cookies_count 2
151
+
152
+ browser.cookies.clear
153
+ verify_cookies_count 0
140
154
  end
141
155
 
142
- describe '#load', except: {browser: :ie} do
143
- it 'loads cookies from file' do
144
- browser.cookies.clear
145
- browser.cookies.load file
146
- expected = browser.cookies.to_a
147
- actual = YAML.safe_load(File.read(file), permitted_classes: [Symbol])
156
+ context 'when using file' do
157
+ let(:file) { "#{Dir.tmpdir}/cookies" }
148
158
 
149
- expected.each { |cookie| cookie.delete(:expires) }
150
- actual.each { |cookie| cookie.delete(:expires) }
159
+ before do
160
+ browser.goto set_cookie_url
161
+ browser.cookies.save file
162
+ end
151
163
 
152
- expect(actual).to eq(expected)
164
+ describe '#save' do
165
+ it 'saves cookies to file' do
166
+ expect(File.read(file)).to eq(browser.cookies.to_a.to_yaml)
167
+ end
168
+ end
169
+
170
+ describe '#load', except: {browser: :ie} do
171
+ it 'loads cookies from file' do
172
+ browser.cookies.clear
173
+ browser.cookies.load file
174
+ expected = browser.cookies.to_a
175
+ actual = YAML.safe_load_file(file, permitted_classes: [::Symbol])
176
+
177
+ expected.each { |cookie| cookie.delete(:expires) }
178
+ actual.each { |cookie| cookie.delete(:expires) }
179
+
180
+ expect(actual).to eq(expected)
181
+ end
153
182
  end
154
183
  end
155
- end
156
184
 
157
- def set_cookie_url
158
- # add timestamp to url to avoid caching in IE8
159
- WatirSpec.url_for('set_cookie/index.html') + "?t=#{Time.now.to_i + Time.now.usec}"
160
- end
185
+ def set_cookie_url
186
+ # add timestamp to url to avoid caching in IE8
187
+ WatirSpec.url_for('set_cookie/index.html') + "?t=#{::Time.now.to_i + ::Time.now.usec}"
188
+ end
161
189
 
162
- def verify_cookies_count(expected_size)
163
- cookies = browser.cookies.to_a
164
- msg = "expected #{expected_size} cookies, got #{cookies.size}: #{cookies.inspect}"
165
- expect(cookies.size).to eq(expected_size), msg
190
+ def verify_cookies_count(expected_size)
191
+ cookies = browser.cookies.to_a
192
+ msg = "expected #{expected_size} cookies, got #{cookies.size}: #{cookies.inspect}"
193
+ expect(cookies.size).to eq(expected_size), msg
194
+ end
166
195
  end
167
196
  end
@@ -2,35 +2,37 @@
2
2
 
3
3
  require 'watirspec_helper'
4
4
 
5
- describe 'Element' do
6
- context 'drag and drop', except: {browser: :ie} do
7
- before { browser.goto WatirSpec.url_for('drag_and_drop.html') }
5
+ module Watir
6
+ describe Element do
7
+ describe 'using drag and drop', except: {browser: :ie} do
8
+ before { browser.goto WatirSpec.url_for('drag_and_drop.html') }
8
9
 
9
- let(:draggable) { browser.div id: 'draggable' }
10
- let(:droppable) { browser.div id: 'droppable' }
10
+ let(:draggable) { browser.div id: 'draggable' }
11
+ let(:droppable) { browser.div id: 'droppable' }
11
12
 
12
- it 'can drag and drop an element onto another' do
13
- expect(droppable.text).to include 'Drop here'
14
- draggable.drag_and_drop_on droppable
15
- expect(droppable.text).to include 'Dropped!'
16
- end
13
+ it 'can drag and drop an element onto another' do
14
+ expect(droppable.text).to include 'Drop here'
15
+ draggable.drag_and_drop_on droppable
16
+ expect(droppable.text).to include 'Dropped!'
17
+ end
17
18
 
18
- it 'can drag and drop an element onto another with specified scroll position' do
19
- expect(droppable.text).to include 'Drop here'
20
- draggable.drag_and_drop_on droppable, scroll_to: :center
21
- expect(droppable.text).to include 'Dropped!'
22
- end
19
+ it 'can drag and drop an element onto another with specified scroll position' do
20
+ expect(droppable.text).to include 'Drop here'
21
+ draggable.drag_and_drop_on droppable, scroll_to: :center
22
+ expect(droppable.text).to include 'Dropped!'
23
+ end
23
24
 
24
- it 'can drag an element by the given offset' do
25
- expect(droppable.text).to include 'Drop here'
26
- draggable.drag_and_drop_by 200, 50
27
- expect(droppable.text).to include 'Dropped!'
28
- end
25
+ it 'can drag an element by the given offset' do
26
+ expect(droppable.text).to include 'Drop here'
27
+ draggable.drag_and_drop_by 200, 50
28
+ expect(droppable.text).to include 'Dropped!'
29
+ end
29
30
 
30
- it 'can drag an element by the given offset with specified scroll position' do
31
- expect(droppable.text).to include 'Drop here'
32
- draggable.drag_and_drop_by 200, 50, scroll_to: :center
33
- expect(droppable.text).to include 'Dropped!'
31
+ it 'can drag an element by the given offset with specified scroll position' do
32
+ expect(droppable.text).to include 'Drop here'
33
+ draggable.drag_and_drop_by 200, 50, scroll_to: :center
34
+ expect(droppable.text).to include 'Dropped!'
35
+ end
34
36
  end
35
37
  end
36
38
  end
@@ -2,79 +2,85 @@
2
2
 
3
3
  require 'watirspec_helper'
4
4
 
5
- describe Watir::Locators::Element::Locator do
6
- describe 'Visible Elements' do
7
- before do
8
- browser.goto(WatirSpec.url_for('wait.html'))
9
- end
5
+ module Watir
6
+ module Locators
7
+ class Element
8
+ describe Locator do
9
+ describe 'Visible Elements' do
10
+ before do
11
+ browser.goto(WatirSpec.url_for('wait.html'))
12
+ end
10
13
 
11
- context 'when true' do
12
- it 'finds single element' do
13
- element = browser.body.element(visible: true)
14
- expect(element.id).to eq 'foo'
15
- end
14
+ context 'when true' do
15
+ it 'finds single element' do
16
+ element = browser.body.element(visible: true)
17
+ expect(element.id).to eq 'foo'
18
+ end
16
19
 
17
- it 'handles tag_name and index' do
18
- element = browser.div(visible: true, index: 1)
19
- expect(element.id).to eq 'buttons'
20
- end
20
+ it 'handles tag_name and index' do
21
+ element = browser.div(visible: true, index: 1)
22
+ expect(element.id).to eq 'buttons'
23
+ end
21
24
 
22
- it 'handles :tag_name and a single regexp attribute' do
23
- element = browser.div(visible: true, id: /ons/)
24
- expect(element.id).to eq 'buttons'
25
- end
25
+ it 'handles :tag_name and a single regexp attribute' do
26
+ element = browser.div(visible: true, id: /ons/)
27
+ expect(element.id).to eq 'buttons'
28
+ end
26
29
 
27
- it 'handles :xpath' do
28
- element = browser.element(visible: true, xpath: './/div[@id="foo"]')
29
- expect(element.id).to eq 'foo'
30
- end
30
+ it 'handles :xpath' do
31
+ element = browser.element(visible: true, xpath: './/div[@id="foo"]')
32
+ expect(element.id).to eq 'foo'
33
+ end
31
34
 
32
- it 'handles :css' do
33
- element = browser.element(visible: true, css: 'div#foo')
34
- expect(element.id).to eq 'foo'
35
- end
35
+ it 'handles :css' do
36
+ element = browser.element(visible: true, css: 'div#foo')
37
+ expect(element.id).to eq 'foo'
38
+ end
36
39
 
37
- it 'handles in collections' do
38
- elements = browser.divs(visible: true)
39
- expect(elements.size).to eq 3
40
- end
41
- end
40
+ it 'handles in collections' do
41
+ elements = browser.divs(visible: true)
42
+ expect(elements.size).to eq 3
43
+ end
44
+ end
42
45
 
43
- context 'when false' do
44
- it 'finds single element' do
45
- element = browser.body.element(visible: false)
46
- expect(element.id).to eq 'bar'
47
- end
46
+ context 'when false' do
47
+ it 'finds single element' do
48
+ element = browser.body.element(visible: false)
49
+ expect(element.id).to eq 'bar'
50
+ end
48
51
 
49
- it 'handles tag_name and index' do
50
- element = browser.div(visible: false, index: 1)
51
- expect(element.id).to eq 'also_hidden'
52
- end
52
+ it 'handles tag_name and index' do
53
+ element = browser.div(visible: false, index: 1)
54
+ expect(element.id).to eq 'also_hidden'
55
+ end
53
56
 
54
- it 'handles :tag_name and a single regexp attribute' do
55
- element = browser.div(visible: false, id: /_/)
56
- expect(element.id).to eq 'also_hidden'
57
- end
57
+ it 'handles :tag_name and a single regexp attribute' do
58
+ element = browser.div(visible: false, id: /_/)
59
+ expect(element.id).to eq 'also_hidden'
60
+ end
58
61
 
59
- it 'handles :xpath' do
60
- element = browser.element(visible: false, xpath: './/div[@id="bar"]')
61
- expect(element.id).to eq 'bar'
62
- end
62
+ it 'handles :xpath' do
63
+ element = browser.element(visible: false, xpath: './/div[@id="bar"]')
64
+ expect(element.id).to eq 'bar'
65
+ end
63
66
 
64
- it 'handles :css' do
65
- element = browser.element(visible: false, css: 'div#bar')
66
- expect(element.id).to eq 'bar'
67
- end
67
+ it 'handles :css' do
68
+ element = browser.element(visible: false, css: 'div#bar')
69
+ expect(element.id).to eq 'bar'
70
+ end
68
71
 
69
- it 'handles in collections' do
70
- elements = browser.divs(visible: false)
71
- expect(elements.size).to eq 3
72
- end
73
- end
72
+ it 'handles in collections' do
73
+ elements = browser.divs(visible: false)
74
+ expect(elements.size).to eq 3
75
+ end
76
+ end
74
77
 
75
- it 'raises exception when value is not Boolean' do
76
- msg = 'expected one of [TrueClass, FalseClass], got "true":String'
77
- expect { browser.body.element(visible: 'true') }.to raise_exception(TypeError, msg)
78
+ it 'raises exception when value is not Boolean' do
79
+ msg = 'expected one of [TrueClass, FalseClass], got "true":String'
80
+ expect { browser.body.element(visible: 'true') }.to raise_exception(TypeError, msg)
81
+ end
82
+ end
83
+ end
78
84
  end
79
85
  end
80
86
  end
@@ -2,66 +2,68 @@
2
2
 
3
3
  require 'watirspec_helper'
4
4
 
5
- describe 'Area' do
6
- before :each do
7
- browser.goto(WatirSpec.url_for('images.html'))
8
- end
5
+ module Watir
6
+ describe Area do
7
+ before do
8
+ browser.goto(WatirSpec.url_for('images.html'))
9
+ end
9
10
 
10
- # Exists method
11
- describe '#exist?' do
12
- it 'returns true if the area exists' do
13
- expect(browser.area(id: 'NCE')).to exist
14
- expect(browser.area(id: /NCE/)).to exist
15
- expect(browser.area(title: 'Tables')).to exist
16
- expect(browser.area(title: /Tables/)).to exist
17
- expect(browser.area(href: 'tables.html')).to exist
18
- expect(browser.area(href: /tables/)).to exist
11
+ # Exists method
12
+ describe '#exist?' do
13
+ it 'returns true if the area exists' do
14
+ expect(browser.area(id: 'NCE')).to exist
15
+ expect(browser.area(id: /NCE/)).to exist
16
+ expect(browser.area(title: 'Tables')).to exist
17
+ expect(browser.area(title: /Tables/)).to exist
18
+ expect(browser.area(href: 'tables.html')).to exist
19
+ expect(browser.area(href: /tables/)).to exist
19
20
 
20
- expect(browser.area(index: 0)).to exist
21
- expect(browser.area(xpath: "//area[@id='NCE']")).to exist
22
- end
21
+ expect(browser.area(index: 0)).to exist
22
+ expect(browser.area(xpath: "//area[@id='NCE']")).to exist
23
+ end
23
24
 
24
- it 'returns the first area if given no args' do
25
- expect(browser.area).to exist
26
- end
25
+ it 'returns the first area if given no args' do
26
+ expect(browser.area).to exist
27
+ end
27
28
 
28
- it "returns false if the area doesn't exist" do
29
- expect(browser.area(id: 'no_such_id')).to_not exist
30
- expect(browser.area(id: /no_such_id/)).to_not exist
31
- expect(browser.area(title: 'no_such_title')).to_not exist
32
- expect(browser.area(title: /no_such_title/)).to_not exist
29
+ it "returns false if the area doesn't exist" do
30
+ expect(browser.area(id: 'no_such_id')).not_to exist
31
+ expect(browser.area(id: /no_such_id/)).not_to exist
32
+ expect(browser.area(title: 'no_such_title')).not_to exist
33
+ expect(browser.area(title: /no_such_title/)).not_to exist
33
34
 
34
- expect(browser.area(href: 'no-tables.html')).to_not exist
35
- expect(browser.area(href: /no-tables/)).to_not exist
35
+ expect(browser.area(href: 'no-tables.html')).not_to exist
36
+ expect(browser.area(href: /no-tables/)).not_to exist
36
37
 
37
- expect(browser.area(index: 1337)).to_not exist
38
- expect(browser.area(xpath: "//area[@id='no_such_id']")).to_not exist
39
- end
38
+ expect(browser.area(index: 1337)).not_to exist
39
+ expect(browser.area(xpath: "//area[@id='no_such_id']")).not_to exist
40
+ end
40
41
 
41
- it "raises TypeError when 'what' argument is invalid" do
42
- expect { browser.area(id: 3.14).exists? }.to raise_error(TypeError)
42
+ it "raises TypeError when 'what' argument is invalid" do
43
+ expect { browser.area(id: 3.14).exists? }.to raise_error(TypeError)
44
+ end
43
45
  end
44
- end
45
46
 
46
- # Attribute methods
47
- describe '#id' do
48
- it 'returns the id attribute' do
49
- expect(browser.area(index: 0).id).to eq 'NCE'
50
- end
47
+ # Attribute methods
48
+ describe '#id' do
49
+ it 'returns the id attribute' do
50
+ expect(browser.area(index: 0).id).to eq 'NCE'
51
+ end
51
52
 
52
- it "returns an empty string if the element exists and the attribute doesn't" do
53
- expect(browser.area(index: 2).id).to eq ''
54
- end
53
+ it "returns an empty string if the element exists and the attribute doesn't" do
54
+ expect(browser.area(index: 2).id).to eq ''
55
+ end
55
56
 
56
- it "raises UnknownObjectException if the area doesn't exist" do
57
- expect { browser.area(id: 'no_such_id').id }.to raise_unknown_object_exception
58
- expect { browser.area(index: 1337).id }.to raise_unknown_object_exception
57
+ it "raises UnknownObjectException if the area doesn't exist" do
58
+ expect { browser.area(id: 'no_such_id').id }.to raise_unknown_object_exception
59
+ expect { browser.area(index: 1337).id }.to raise_unknown_object_exception
60
+ end
59
61
  end
60
- end
61
62
 
62
- describe '#respond_to?' do
63
- it 'returns true for all attribute methods' do
64
- expect(browser.area(index: 0)).to respond_to(:id)
63
+ describe '#respond_to?' do
64
+ it 'returns true for all attribute methods' do
65
+ expect(browser.area(index: 0)).to respond_to(:id)
66
+ end
65
67
  end
66
68
  end
67
69
  end