watir 6.16.2 → 6.18.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/actions/enable-safari/action.yml +11 -0
- data/.github/actions/install-chrome/action.yml +11 -0
- data/.github/workflows/linux.yml +61 -0
- data/.github/workflows/mac.yml +55 -0
- data/.github/workflows/unit.yml +31 -0
- data/.github/workflows/windows.yml +39 -0
- data/.rubocop.yml +32 -107
- data/.rubocop_todo.yml +36 -0
- data/CHANGES.md +42 -0
- data/Gemfile +3 -1
- data/LICENSE +2 -2
- data/README.md +9 -10
- data/Rakefile +4 -4
- data/lib/watir-webdriver.rb +1 -1
- data/lib/watir.rb +1 -1
- data/lib/watir/adjacent.rb +8 -10
- data/lib/watir/after_hooks.rb +4 -4
- data/lib/watir/alert.rb +1 -0
- data/lib/watir/attribute_helper.rb +2 -0
- data/lib/watir/browser.rb +7 -3
- data/lib/watir/capabilities.rb +9 -6
- data/lib/watir/cookies.rb +3 -1
- data/lib/watir/element_collection.rb +21 -6
- data/lib/watir/elements/element.rb +66 -53
- data/lib/watir/elements/file_field.rb +1 -0
- data/lib/watir/elements/html_elements.rb +0 -1
- data/lib/watir/elements/iframe.rb +4 -3
- data/lib/watir/elements/link.rb +0 -9
- data/lib/watir/elements/radio.rb +1 -1
- data/lib/watir/elements/select.rb +22 -7
- data/lib/watir/generator/base/spec_extractor.rb +4 -4
- data/lib/watir/generator/html/generator.rb +1 -1
- data/lib/watir/has_window.rb +17 -15
- data/lib/watir/js_execution.rb +3 -3
- data/lib/watir/js_snippets.rb +2 -2
- data/lib/watir/legacy_wait.rb +1 -1
- data/lib/watir/locators.rb +1 -3
- data/lib/watir/locators/element/locator.rb +22 -12
- data/lib/watir/locators/element/selector_builder.rb +12 -13
- data/lib/watir/locators/element/selector_builder/xpath.rb +40 -13
- data/lib/watir/locators/text_field/matcher.rb +1 -1
- data/lib/watir/locators/text_field/selector_builder/xpath.rb +3 -1
- data/lib/watir/logger.rb +7 -20
- data/lib/watir/radio_set.rb +2 -2
- data/lib/watir/user_editable.rb +6 -2
- data/lib/watir/version.rb +1 -1
- data/lib/watir/wait.rb +2 -0
- data/lib/watir/wait/timer.rb +1 -1
- data/lib/watir/window.rb +8 -4
- data/lib/watir/window_collection.rb +105 -0
- data/lib/watirspec.rb +2 -1
- data/lib/watirspec/guards.rb +1 -1
- data/lib/watirspec/implementation.rb +3 -5
- data/lib/watirspec/rake_tasks.rb +2 -0
- data/lib/watirspec/runner.rb +5 -1
- data/lib/watirspec/server.rb +1 -1
- data/spec/spec_helper.rb +2 -7
- data/spec/unit/container_spec.rb +1 -1
- data/spec/unit/logger_spec.rb +5 -7
- data/spec/unit/match_elements/element_spec.rb +17 -15
- data/spec/unit/selector_builder/button_spec.rb +16 -15
- data/spec/unit/selector_builder/element_spec.rb +58 -9
- data/spec/unit/selector_builder/text_field_spec.rb +14 -14
- data/spec/unit/unit_helper.rb +2 -4
- data/spec/watirspec/after_hooks_spec.rb +58 -68
- data/spec/watirspec/alert_spec.rb +69 -79
- data/spec/watirspec/browser_spec.rb +51 -48
- data/spec/watirspec/cookies_spec.rb +52 -37
- data/spec/watirspec/drag_and_drop_spec.rb +14 -38
- data/spec/watirspec/elements/button_spec.rb +2 -0
- data/spec/watirspec/elements/buttons_spec.rb +1 -1
- data/spec/watirspec/elements/checkbox_spec.rb +8 -4
- data/spec/watirspec/elements/date_field_spec.rb +18 -9
- data/spec/watirspec/elements/date_time_field_spec.rb +3 -4
- data/spec/watirspec/elements/div_spec.rb +62 -54
- data/spec/watirspec/elements/element_spec.rb +73 -88
- data/spec/watirspec/elements/elements_spec.rb +12 -3
- data/spec/watirspec/elements/filefield_spec.rb +25 -50
- data/spec/watirspec/elements/form_spec.rb +6 -8
- data/spec/watirspec/elements/frame_spec.rb +10 -13
- data/spec/watirspec/elements/iframe_spec.rb +12 -9
- data/spec/watirspec/elements/iframes_spec.rb +2 -2
- data/spec/watirspec/elements/link_spec.rb +23 -12
- data/spec/watirspec/elements/links_spec.rb +11 -3
- data/spec/watirspec/elements/option_spec.rb +15 -17
- data/spec/watirspec/elements/select_list_spec.rb +222 -117
- data/spec/watirspec/elements/text_field_spec.rb +8 -4
- data/spec/watirspec/elements/tr_spec.rb +0 -9
- data/spec/watirspec/html/forms_with_input_elements.html +1 -0
- data/spec/watirspec/html/iframes.html +3 -0
- data/spec/watirspec/html/non_control_elements.html +4 -4
- data/spec/watirspec/html/right_click.html +12 -0
- data/spec/watirspec/html/wait.html +6 -6
- data/spec/watirspec/html/window_switching.html +10 -0
- data/spec/watirspec/legacy_wait_spec.rb +216 -0
- data/spec/watirspec/support/rspec_matchers.rb +17 -13
- data/spec/watirspec/user_editable_spec.rb +1 -1
- data/spec/watirspec/wait_spec.rb +257 -305
- data/spec/watirspec/window_switching_spec.rb +332 -211
- data/spec/watirspec_helper.rb +16 -19
- data/support/doctest_helper.rb +0 -2
- data/watir.gemspec +6 -7
- metadata +36 -26
- data/.travis.yml +0 -84
- data/appveyor.yml +0 -12
- data/lib/watir/elements/area.rb +0 -10
- data/spec/watirspec/relaxed_locate_spec.rb +0 -113
@@ -37,12 +37,21 @@ describe 'Elements' do
|
|
37
37
|
it 'finds elements by visible text' do
|
38
38
|
browser.goto WatirSpec.url_for('non_control_elements.html')
|
39
39
|
container = browser.div(id: 'visible_text')
|
40
|
+
|
40
41
|
expect(container.elements(visible_text: 'all visible').count).to eq(1)
|
41
42
|
expect(container.elements(visible_text: /all visible/).count).to eq(1)
|
42
|
-
expect(container.elements(visible_text: 'some visible').count).to eq(1)
|
43
43
|
expect(container.elements(visible_text: /some visible/).count).to eq(1)
|
44
|
-
|
45
|
-
|
44
|
+
end
|
45
|
+
|
46
|
+
bug 'Safari is not filtering out hidden text', :safari do
|
47
|
+
it 'finds elements in spite of hidden text' do
|
48
|
+
browser.goto WatirSpec.url_for('non_control_elements.html')
|
49
|
+
container = browser.div(id: 'visible_text')
|
50
|
+
|
51
|
+
expect(container.elements(visible_text: 'some visible').count).to eq(1)
|
52
|
+
expect(container.elements(visible_text: 'none visible').count).to eq(0)
|
53
|
+
expect(container.elements(visible_text: /none visible/).count).to eq(0)
|
54
|
+
end
|
46
55
|
end
|
47
56
|
end
|
48
57
|
end
|
@@ -92,66 +92,41 @@ describe 'FileField' do
|
|
92
92
|
# Manipulation methods
|
93
93
|
|
94
94
|
describe '#set' do
|
95
|
-
|
96
|
-
|
97
|
-
it 'is able to set a file path in the field and click the upload button and fire the onchange event' do
|
98
|
-
browser.goto WatirSpec.url_for('forms_with_input_elements.html')
|
95
|
+
it 'is able to set a file path in the field and click the upload button and fire the onchange event' do
|
96
|
+
browser.goto WatirSpec.url_for('forms_with_input_elements.html')
|
99
97
|
|
100
|
-
|
101
|
-
|
98
|
+
element = browser.file_field(name: 'new_user_portrait')
|
99
|
+
element.upload __FILE__
|
102
100
|
|
103
|
-
|
101
|
+
expect(element.value).to include(File.basename(__FILE__)) # only some browser will return the full path
|
102
|
+
expect(messages.first).to include(File.basename(__FILE__))
|
104
103
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
browser.button(name: 'new_user_submit').click
|
109
|
-
end
|
110
|
-
end
|
104
|
+
browser.button(name: 'new_user_submit').click
|
105
|
+
end
|
111
106
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
end
|
107
|
+
it 'raises an error if the file does not exist' do
|
108
|
+
expect {
|
109
|
+
browser.file_field.set(File.join(Dir.tmpdir, 'unlikely-to-exist'))
|
110
|
+
}.to raise_error(Errno::ENOENT)
|
117
111
|
end
|
118
112
|
end
|
119
113
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
it 'is able to set a file path in the field and click the upload button and fire the onchange event' do
|
124
|
-
browser.goto WatirSpec.url_for('forms_with_input_elements.html')
|
125
|
-
|
126
|
-
path = File.expand_path(__FILE__)
|
127
|
-
element = browser.file_field(name: 'new_user_portrait')
|
114
|
+
describe '#value=' do
|
115
|
+
it 'is able to set a file path in the field and click the upload button and fire the onchange event' do
|
116
|
+
browser.goto WatirSpec.url_for('forms_with_input_elements.html')
|
128
117
|
|
129
|
-
|
130
|
-
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
not_compliant_on :internet_explorer, :firefox, :chrome do
|
135
|
-
it 'does not raise an error if the file does not exist' do
|
136
|
-
path = File.join(Dir.tmpdir, 'unlikely-to-exist')
|
137
|
-
browser.file_field.value = path
|
138
|
-
|
139
|
-
expected = path
|
140
|
-
expected.tr!('/', '\\') if Selenium::WebDriver::Platform.windows?
|
118
|
+
path = File.expand_path(__FILE__)
|
119
|
+
element = browser.file_field(name: 'new_user_portrait')
|
141
120
|
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
end
|
121
|
+
element.value = path
|
122
|
+
expect(element.value).to include(File.basename(path)) # only some browser will return the full path
|
123
|
+
end
|
146
124
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
expect(value).to match(/\.travis\.yml$/)
|
153
|
-
end
|
154
|
-
end
|
125
|
+
not_compliant_on :internet_explorer, %i[chrome windows] do
|
126
|
+
it 'does not alter its argument' do
|
127
|
+
value = File.expand_path '.rubocop.yml'
|
128
|
+
browser.file_field.value = value
|
129
|
+
expect(value).to match(/\.rubocop\.yml$/)
|
155
130
|
end
|
156
131
|
end
|
157
132
|
end
|
@@ -51,14 +51,12 @@ describe 'Form' do
|
|
51
51
|
expect(browser.text).to include('Semantic table')
|
52
52
|
end
|
53
53
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
expect(messages[0]).to eq 'submit'
|
61
|
-
end
|
54
|
+
it 'triggers onsubmit event and takes its result into account' do
|
55
|
+
form = browser.form(name: 'user_new')
|
56
|
+
form.submit
|
57
|
+
expect(form).to exist
|
58
|
+
expect(messages.size).to eq 1
|
59
|
+
expect(messages[0]).to eq 'submit'
|
62
60
|
end
|
63
61
|
|
64
62
|
compliant_on :relaxed_locate do
|
@@ -9,13 +9,11 @@ describe 'Frame' do
|
|
9
9
|
browser.goto(WatirSpec.url_for('frames.html'))
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
expect(browser.frame(id: 'frame_2').text_field(name: 'recieverElement').value).to eq 'send_this_value'
|
18
|
-
end
|
12
|
+
it 'handles crossframe javascript' do
|
13
|
+
expect(browser.frame(id: 'frame_1').text_field(name: 'senderElement').value).to eq 'send_this_value'
|
14
|
+
expect(browser.frame(id: 'frame_2').text_field(name: 'recieverElement').value).to eq 'old_value'
|
15
|
+
browser.frame(id: 'frame_1').button(id: 'send').click
|
16
|
+
expect(browser.frame(id: 'frame_2').text_field(name: 'recieverElement').value).to eq 'send_this_value'
|
19
17
|
end
|
20
18
|
|
21
19
|
describe '#exist?' do
|
@@ -50,14 +48,13 @@ describe 'Frame' do
|
|
50
48
|
end
|
51
49
|
|
52
50
|
bug 'https://bugzilla.mozilla.org/show_bug.cgi?id=1255946', :firefox do
|
53
|
-
|
54
|
-
|
55
|
-
browser.goto(WatirSpec.url_for('nested_frames.html'))
|
51
|
+
it 'handles nested frames' do
|
52
|
+
browser.goto(WatirSpec.url_for('nested_frames.html'))
|
56
53
|
|
57
|
-
|
54
|
+
browser.frame(id: 'two').frame(id: 'three').link(id: 'four').click
|
58
55
|
|
59
|
-
|
60
|
-
|
56
|
+
Watir::Wait.until { browser.title == 'definition_lists' }
|
57
|
+
expect { browser.goto(WatirSpec.url_for('nested_frames.html')) }.to_not raise_exception
|
61
58
|
end
|
62
59
|
end
|
63
60
|
|
@@ -11,7 +11,7 @@ describe 'IFrame' do
|
|
11
11
|
|
12
12
|
not_compliant_on :safari do
|
13
13
|
bug 'Firefox 58 broke this, appears to be working in Nightly',
|
14
|
-
%i[firefox linux]
|
14
|
+
%i[firefox linux] do
|
15
15
|
it 'handles crossframe javascript' do
|
16
16
|
browser.goto WatirSpec.url_for('iframes.html')
|
17
17
|
|
@@ -78,12 +78,17 @@ describe 'IFrame' do
|
|
78
78
|
expect(browser.iframe(xpath: "//iframe[@id='no_such_id']")).to_not exist
|
79
79
|
end
|
80
80
|
|
81
|
-
it 'returns
|
81
|
+
it 'returns true if an element in an iframe does exist' do
|
82
82
|
expect(browser.iframe.element(css: '#senderElement')).to exist
|
83
83
|
expect(browser.iframe.element(id: 'senderElement')).to exist
|
84
84
|
end
|
85
85
|
|
86
|
-
it 'returns true
|
86
|
+
it 'returns true for multiple elements that exist in an iframe with a parent selector' do
|
87
|
+
expect(browser.div(class: 'wrapper').iframe.element(id: 'first_grandson')).to exist
|
88
|
+
expect(browser.div(class: 'wrapper').iframe.element(id: 'second_grandson')).to exist
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'returns false if an element in an iframe does not exist' do
|
87
92
|
expect(browser.iframe.element(css: '#no_such_id')).to_not exist
|
88
93
|
expect(browser.iframe.element(id: 'no_such_id')).to_not exist
|
89
94
|
end
|
@@ -112,13 +117,11 @@ describe 'IFrame' do
|
|
112
117
|
end
|
113
118
|
|
114
119
|
bug 'https://bugzilla.mozilla.org/show_bug.cgi?id=1255946', :firefox do
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
browser.iframe(id: 'two').iframe(id: 'three').link(id: 'four').click
|
120
|
+
it 'handles nested iframes' do
|
121
|
+
browser.goto(WatirSpec.url_for('nested_iframes.html'))
|
122
|
+
browser.iframe(id: 'two').iframe(id: 'three').link(id: 'four').click
|
119
123
|
|
120
|
-
|
121
|
-
end
|
124
|
+
Watir::Wait.until { browser.title == 'definition_lists' }
|
122
125
|
end
|
123
126
|
end
|
124
127
|
|
@@ -13,13 +13,13 @@ describe 'IFrames' do
|
|
13
13
|
|
14
14
|
describe 'eql?' do
|
15
15
|
it 'matches equality of iframe with that from a collection' do
|
16
|
-
expect(browser.iframes.last).to eq browser.iframe(id: '
|
16
|
+
expect(browser.iframes.last).to eq browser.iframe(id: 'iframe_3')
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
describe '#length' do
|
21
21
|
it 'returns the correct number of iframes' do
|
22
|
-
expect(browser.iframes.length).to eq
|
22
|
+
expect(browser.iframes.length).to eq 3
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
@@ -134,20 +134,24 @@ describe 'Link' do
|
|
134
134
|
expect(browser.text.include?('User administration')).to be true
|
135
135
|
end
|
136
136
|
|
137
|
-
|
138
|
-
|
139
|
-
|
137
|
+
bug 'sometimes safari does not work on the first click', :safari do
|
138
|
+
it 'finds an existing link by (index: Integer) and clicks it' do
|
139
|
+
browser.link(index: 2).click
|
140
|
+
expect(browser.text.include?('User administration')).to be true
|
141
|
+
end
|
140
142
|
end
|
141
143
|
|
142
144
|
it "raises an UnknownObjectException if the link doesn't exist" do
|
143
145
|
expect { browser.link(index: 1337).click }.to raise_unknown_object_exception
|
144
146
|
end
|
145
147
|
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
148
|
+
bug 'Safari throws a not interactable error', :safari do
|
149
|
+
it 'clicks a link with no text content but an img child' do
|
150
|
+
browser.goto WatirSpec.url_for('images.html')
|
151
|
+
browser.link(href: /definition_lists.html/).click
|
152
|
+
Watir::Wait.while { browser.title == 'Images' || browser.title == '' }
|
153
|
+
expect(browser.title).to eq 'definition_lists'
|
154
|
+
end
|
151
155
|
end
|
152
156
|
end
|
153
157
|
|
@@ -157,18 +161,25 @@ describe 'Link' do
|
|
157
161
|
|
158
162
|
expect(browser.link(visible_text: 'all visible')).to exist
|
159
163
|
expect(browser.link(visible_text: /all visible/)).to exist
|
160
|
-
expect(browser.link(visible_text: 'some visible')).to exist
|
161
164
|
expect(browser.link(visible_text: /some visible/)).to exist
|
162
|
-
expect(browser.link(visible_text: 'none visible')).not_to exist
|
163
|
-
expect(browser.link(visible_text: /none visible/)).not_to exist
|
164
165
|
|
165
166
|
expect(browser.link(visible_text: 'Link 2', class: 'external')).to exist
|
166
167
|
expect(browser.link(visible_text: /Link 2/, class: 'external')).to exist
|
167
168
|
end
|
168
169
|
|
170
|
+
bug 'Safari is not filtering out hidden text', :safari do
|
171
|
+
it 'finds links in spite of hidden text' do
|
172
|
+
browser.goto WatirSpec.url_for('non_control_elements.html')
|
173
|
+
|
174
|
+
expect(browser.link(visible_text: 'some visible')).to exist
|
175
|
+
expect(browser.link(visible_text: 'none visible')).not_to exist
|
176
|
+
expect(browser.link(visible_text: /none visible/)).not_to exist
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
169
180
|
it 'raises exception unless value is a String or a RegExp' do
|
170
181
|
browser.goto WatirSpec.url_for('non_control_elements.html')
|
171
|
-
msg = /expected one of \[String, Regexp\], got 7
|
182
|
+
msg = /expected one of \[String, Regexp\], got 7:Integer/
|
172
183
|
expect { browser.link(visible_text: 7).exists? }.to raise_exception(TypeError, msg)
|
173
184
|
end
|
174
185
|
end
|
@@ -46,10 +46,18 @@ describe 'Links' do
|
|
46
46
|
container = browser.div(id: 'visible_text')
|
47
47
|
expect(container.links(visible_text: 'all visible').count).to eq(1)
|
48
48
|
expect(container.links(visible_text: /all visible/).count).to eq(1)
|
49
|
-
expect(container.links(visible_text: 'some visible').count).to eq(1)
|
50
49
|
expect(container.links(visible_text: /some visible/).count).to eq(1)
|
51
|
-
|
52
|
-
|
50
|
+
end
|
51
|
+
|
52
|
+
bug 'Safari is not filtering out hidden text', :safari do
|
53
|
+
it 'finds links in spite of hidden text' do
|
54
|
+
browser.goto WatirSpec.url_for('non_control_elements.html')
|
55
|
+
container = browser.div(id: 'visible_text')
|
56
|
+
|
57
|
+
expect(container.links(visible_text: 'some visible').count).to eq(1)
|
58
|
+
expect(container.links(visible_text: 'none visible').count).to eq(0)
|
59
|
+
expect(container.links(visible_text: /none visible/).count).to eq(0)
|
60
|
+
end
|
53
61
|
end
|
54
62
|
end
|
55
63
|
end
|
@@ -66,26 +66,24 @@ describe 'Option' do
|
|
66
66
|
end
|
67
67
|
|
68
68
|
describe '#select' do
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
end
|
69
|
+
it 'selects the chosen option (page context)' do
|
70
|
+
browser.option(text: 'Denmark').select
|
71
|
+
expect(browser.select_list(name: 'new_user_country').selected_options.map(&:text)).to eq ['Denmark']
|
72
|
+
end
|
74
73
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
74
|
+
it 'selects the chosen option (select_list context)' do
|
75
|
+
browser.select_list(name: 'new_user_country').option(text: 'Denmark').select
|
76
|
+
expect(browser.select_list(name: 'new_user_country').selected_options.map(&:text)).to eq ['Denmark']
|
77
|
+
end
|
79
78
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
79
|
+
it 'selects the option when found by text (page context)' do
|
80
|
+
browser.option(text: 'Sweden').select
|
81
|
+
expect(browser.option(text: 'Sweden')).to be_selected
|
82
|
+
end
|
84
83
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
end
|
84
|
+
it 'selects the option when found by text (select_list context)' do
|
85
|
+
browser.select_list(name: 'new_user_country').option(text: 'Sweden').select
|
86
|
+
expect(browser.select_list(name: 'new_user_country').option(text: 'Sweden')).to be_selected
|
89
87
|
end
|
90
88
|
|
91
89
|
it 'raises UnknownObjectException if the option does not exist (page context)' do
|
@@ -75,12 +75,23 @@ describe 'SelectList' do
|
|
75
75
|
end
|
76
76
|
|
77
77
|
describe '#value' do
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
78
|
+
it 'returns the value of the selected option' do
|
79
|
+
expect(browser.select_list(index: 0).value).to eq '2'
|
80
|
+
browser.select_list(index: 0).select(/Sweden/)
|
81
|
+
expect(browser.select_list(index: 0).value).to eq '3'
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'returns the value of the selected options' do
|
85
|
+
browser.select_list(name: 'new_user_languages').select('1')
|
86
|
+
expect(browser.select_list(name: 'new_user_languages').value).to eq '1'
|
87
|
+
browser.select_list(name: 'new_user_languages').clear
|
88
|
+
browser.select_list(name: 'new_user_languages').select('NO')
|
89
|
+
expect(browser.select_list(name: 'new_user_languages').value).to eq '3'
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'returns null when no values selected' do
|
93
|
+
browser.select_list(name: 'new_user_languages').clear
|
94
|
+
expect(browser.select_list(name: 'new_user_languages').value).to be_nil
|
84
95
|
end
|
85
96
|
|
86
97
|
it "raises UnknownObjectException if the select list doesn't exist" do
|
@@ -89,16 +100,14 @@ describe 'SelectList' do
|
|
89
100
|
end
|
90
101
|
|
91
102
|
describe '#text' do
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
end
|
103
|
+
it 'returns the text of the selected option' do
|
104
|
+
expect(browser.select_list(index: 0).text).to eq 'Norway'
|
105
|
+
browser.select_list(index: 0).select(/Sweden/)
|
106
|
+
expect(browser.select_list(index: 0).text).to eq 'Sweden'
|
107
|
+
end
|
98
108
|
|
99
|
-
|
100
|
-
|
101
|
-
end
|
109
|
+
it "raises UnknownObjectException if the select list doesn't exist" do
|
110
|
+
expect { browser.select_list(index: 1337).text }.to raise_unknown_object_exception
|
102
111
|
end
|
103
112
|
end
|
104
113
|
|
@@ -168,11 +177,9 @@ describe 'SelectList' do
|
|
168
177
|
end
|
169
178
|
|
170
179
|
describe '#clear' do
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
expect(browser.select_list(name: 'new_user_languages').selected_options).to be_empty
|
175
|
-
end
|
180
|
+
it 'clears the selection when possible' do
|
181
|
+
browser.select_list(name: 'new_user_languages').clear
|
182
|
+
expect(browser.select_list(name: 'new_user_languages').selected_options).to be_empty
|
176
183
|
end
|
177
184
|
|
178
185
|
it 'does not clear selections if the select list does not allow multiple selections' do
|
@@ -187,16 +194,14 @@ describe 'SelectList' do
|
|
187
194
|
expect { browser.select_list(name: 'no_such_name').clear }.to raise_unknown_object_exception
|
188
195
|
end
|
189
196
|
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
end
|
197
|
+
it 'fires onchange event' do
|
198
|
+
browser.select_list(name: 'new_user_languages').clear
|
199
|
+
expect(messages.size).to eq 2
|
200
|
+
end
|
195
201
|
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
end
|
202
|
+
it "doesn't fire onchange event for already cleared option" do
|
203
|
+
browser.select_list(name: 'new_user_languages').option.clear
|
204
|
+
expect(messages.size).to eq 0
|
200
205
|
end
|
201
206
|
end
|
202
207
|
|
@@ -214,30 +219,28 @@ describe 'SelectList' do
|
|
214
219
|
end
|
215
220
|
end
|
216
221
|
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
end
|
222
|
+
describe '#selected?' do
|
223
|
+
it 'returns true if the given option is selected by text' do
|
224
|
+
browser.select_list(name: 'new_user_country').select('Denmark')
|
225
|
+
expect(browser.select_list(name: 'new_user_country')).to be_selected('Denmark')
|
226
|
+
end
|
223
227
|
|
224
|
-
|
225
|
-
|
226
|
-
|
228
|
+
it 'returns false if the given option is not selected by text' do
|
229
|
+
expect(browser.select_list(name: 'new_user_country')).to_not be_selected('Sweden')
|
230
|
+
end
|
227
231
|
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
+
it 'returns true if the given option is selected by label' do
|
233
|
+
browser.select_list(name: 'new_user_country').select('Germany')
|
234
|
+
expect(browser.select_list(name: 'new_user_country')).to be_selected('Germany')
|
235
|
+
end
|
232
236
|
|
233
|
-
|
234
|
-
|
235
|
-
|
237
|
+
it 'returns false if the given option is not selected by label' do
|
238
|
+
expect(browser.select_list(name: 'new_user_country')).to_not be_selected('Germany')
|
239
|
+
end
|
236
240
|
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
end
|
241
|
+
it "raises UnknownObjectException if the option doesn't exist" do
|
242
|
+
expect { browser.select_list(name: 'new_user_country').selected?('missing_option') }
|
243
|
+
.to raise_unknown_object_exception
|
241
244
|
end
|
242
245
|
end
|
243
246
|
|
@@ -251,7 +254,9 @@ describe 'SelectList' do
|
|
251
254
|
|
252
255
|
it 'selects an option with a Regexp' do
|
253
256
|
browser.select_list(name: 'new_user_languages').clear
|
254
|
-
expect {
|
257
|
+
expect {
|
258
|
+
browser.select_list(name: 'new_user_languages').select(/1|3/)
|
259
|
+
}.to have_deprecated_select_by
|
255
260
|
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq %w[Danish NO]
|
256
261
|
end
|
257
262
|
end
|
@@ -282,26 +287,14 @@ describe 'SelectList' do
|
|
282
287
|
end
|
283
288
|
end
|
284
289
|
|
285
|
-
it 'selects multiple options
|
290
|
+
it 'selects multiple options successively' do
|
286
291
|
browser.select_list(name: 'new_user_languages').clear
|
287
292
|
browser.select_list(name: 'new_user_languages').select('Danish')
|
288
293
|
browser.select_list(name: 'new_user_languages').select('Swedish')
|
289
294
|
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq %w[Danish Swedish]
|
290
295
|
end
|
291
296
|
|
292
|
-
|
293
|
-
browser.select_list(name: 'new_user_languages').clear
|
294
|
-
browser.select_list(name: 'new_user_languages').select(%w[Danish Swedish])
|
295
|
-
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq %w[Danish Swedish]
|
296
|
-
end
|
297
|
-
|
298
|
-
it 'selects each item in a parameter list' do
|
299
|
-
browser.select_list(name: 'new_user_languages').clear
|
300
|
-
browser.select_list(name: 'new_user_languages').select('Danish', 'Swedish')
|
301
|
-
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq %w[Danish Swedish]
|
302
|
-
end
|
303
|
-
|
304
|
-
bug 'https://bugzilla.mozilla.org/show_bug.cgi?id=1255957', :firefox do
|
297
|
+
bug 'Safari is returning click intercepted error', :safari do
|
305
298
|
it 'selects empty options' do
|
306
299
|
browser.select_list(id: 'delete_user_username').select('')
|
307
300
|
expect(browser.select_list(id: 'delete_user_username').selected_options.map(&:text)).to eq ['']
|
@@ -312,21 +305,21 @@ describe 'SelectList' do
|
|
312
305
|
expect(browser.select_list(name: 'new_user_languages').select('Danish')).to eq 'Danish'
|
313
306
|
end
|
314
307
|
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
end
|
308
|
+
it 'fires onchange event when selecting an item' do
|
309
|
+
browser.select_list(id: 'new_user_languages').select('Danish')
|
310
|
+
expect(messages).to eq ['changed language']
|
311
|
+
end
|
320
312
|
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
313
|
+
it "doesn't fire onchange event when selecting an already selected item" do
|
314
|
+
browser.select_list(id: 'new_user_languages').clear # removes the two pre-selected options
|
315
|
+
browser.select_list(id: 'new_user_languages').select('English')
|
316
|
+
expect(messages.size).to eq 3
|
325
317
|
|
326
|
-
|
327
|
-
|
328
|
-
|
318
|
+
browser.select_list(id: 'new_user_languages').select('English')
|
319
|
+
expect(messages.size).to eq 3
|
320
|
+
end
|
329
321
|
|
322
|
+
bug 'Safari is returning click intercepted error', :safari do
|
330
323
|
it 'returns an empty string when selecting an option that disappears when selected' do
|
331
324
|
expect(browser.select_list(id: 'obsolete').select('sweden')).to eq ''
|
332
325
|
end
|
@@ -353,14 +346,69 @@ describe 'SelectList' do
|
|
353
346
|
.to raise_no_value_found_exception message
|
354
347
|
end
|
355
348
|
|
356
|
-
|
357
|
-
|
358
|
-
.
|
349
|
+
bug 'Safari is returning object enabled instead of disabled', :safari do
|
350
|
+
it 'raises ObjectDisabledException if the option is disabled' do
|
351
|
+
expect { browser.select_list(name: 'new_user_languages').select('Russian') }
|
352
|
+
.to raise_object_disabled_exception
|
353
|
+
end
|
359
354
|
end
|
360
355
|
|
361
356
|
it 'raises a TypeError if argument is not a String, Regexp or Numeric' do
|
362
357
|
expect { browser.select_list(id: 'new_user_languages').select({}) }.to raise_error(TypeError)
|
363
358
|
end
|
359
|
+
|
360
|
+
context 'multiple options' do
|
361
|
+
it 'in an Array' do
|
362
|
+
browser.select_list(name: 'new_user_languages').clear
|
363
|
+
browser.select_list(name: 'new_user_languages').select(%w[Danish Swedish])
|
364
|
+
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq %w[Danish Swedish]
|
365
|
+
end
|
366
|
+
|
367
|
+
it 'in a parameter list' do
|
368
|
+
browser.select_list(name: 'new_user_languages').clear
|
369
|
+
browser.select_list(name: 'new_user_languages').select('Danish', 'Swedish')
|
370
|
+
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq %w[Danish Swedish]
|
371
|
+
end
|
372
|
+
|
373
|
+
it 'based on text' do
|
374
|
+
browser.select_list(name: 'new_user_languages').clear
|
375
|
+
browser.select_list(name: 'new_user_languages').select([/ish/])
|
376
|
+
list = %w[Danish EN Swedish]
|
377
|
+
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
|
378
|
+
end
|
379
|
+
|
380
|
+
it 'based on label and single regexp' do
|
381
|
+
browser.select_list(name: 'new_user_languages').clear
|
382
|
+
browser.select_list(name: 'new_user_languages').select([/NO|EN/])
|
383
|
+
list = %w[EN NO]
|
384
|
+
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
|
385
|
+
end
|
386
|
+
|
387
|
+
it 'based on label and multiple regexp' do
|
388
|
+
browser.select_list(name: 'new_user_languages').clear
|
389
|
+
browser.select_list(name: 'new_user_languages').select([/NO/, /EN/])
|
390
|
+
list = %w[EN NO]
|
391
|
+
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
|
392
|
+
end
|
393
|
+
|
394
|
+
it 'from an Array' do
|
395
|
+
browser.select_list(name: 'new_user_languages').clear
|
396
|
+
browser.select_list(name: 'new_user_languages').select([/ish/, /Latin/])
|
397
|
+
list = ['Danish', 'EN', 'Swedish', 'Azeri - Latin', 'Latin']
|
398
|
+
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
|
399
|
+
end
|
400
|
+
|
401
|
+
it 'from multiple arguments' do
|
402
|
+
browser.select_list(name: 'new_user_languages').clear
|
403
|
+
browser.select_list(name: 'new_user_languages').select(/ish/, /Latin/)
|
404
|
+
list = ['Danish', 'EN', 'Swedish', 'Azeri - Latin', 'Latin']
|
405
|
+
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
|
406
|
+
end
|
407
|
+
|
408
|
+
it 'returns the first matching value if there are multiple matches' do
|
409
|
+
expect(browser.select_list(name: 'new_user_languages').select([/ish/])).to eq 'Danish'
|
410
|
+
end
|
411
|
+
end
|
364
412
|
end
|
365
413
|
|
366
414
|
describe '#select!' do
|
@@ -411,23 +459,9 @@ describe 'SelectList' do
|
|
411
459
|
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq %w[Danish Swedish]
|
412
460
|
end
|
413
461
|
|
414
|
-
it 'selects
|
415
|
-
browser.select_list(
|
416
|
-
browser.select_list(
|
417
|
-
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq %w[Danish Swedish]
|
418
|
-
end
|
419
|
-
|
420
|
-
it 'selects each item in a parameter list' do
|
421
|
-
browser.select_list(name: 'new_user_languages').clear
|
422
|
-
browser.select_list(name: 'new_user_languages').select!('Danish', 'Swedish')
|
423
|
-
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq %w[Danish Swedish]
|
424
|
-
end
|
425
|
-
|
426
|
-
bug 'https://bugzilla.mozilla.org/show_bug.cgi?id=1255957', :firefox do
|
427
|
-
it 'selects empty options' do
|
428
|
-
browser.select_list(id: 'delete_user_username').select!('')
|
429
|
-
expect(browser.select_list(id: 'delete_user_username').selected_options.map(&:text)).to eq ['']
|
430
|
-
end
|
462
|
+
it 'selects empty options' do
|
463
|
+
browser.select_list(id: 'delete_user_username').select!('')
|
464
|
+
expect(browser.select_list(id: 'delete_user_username').selected_options.map(&:text)).to eq ['']
|
431
465
|
end
|
432
466
|
|
433
467
|
it 'returns the value selected' do
|
@@ -454,96 +488,167 @@ describe 'SelectList' do
|
|
454
488
|
.to raise_no_value_found_exception
|
455
489
|
end
|
456
490
|
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
.
|
491
|
+
bug 'Safari is returning object enabled instead of disabled', :safari do
|
492
|
+
it 'raises ObjectDisabledException if the option is disabled' do
|
493
|
+
browser.select_list(id: 'new_user_languages').clear
|
494
|
+
expect { browser.select_list(id: 'new_user_languages').select!('Russian') }
|
495
|
+
.to raise_object_disabled_exception
|
496
|
+
end
|
461
497
|
end
|
462
498
|
|
463
499
|
it 'raises a TypeError if argument is not a String, Regexp or Numeric' do
|
464
500
|
browser.select_list(id: 'new_user_languages').clear
|
465
501
|
expect { browser.select_list(id: 'new_user_languages').select!({}) }.to raise_error(TypeError)
|
466
502
|
end
|
503
|
+
|
504
|
+
context 'multiple options' do
|
505
|
+
it 'in an Array' do
|
506
|
+
browser.select_list(name: 'new_user_languages').clear
|
507
|
+
browser.select_list(name: 'new_user_languages').select!(%w[Danish Swedish])
|
508
|
+
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq %w[Danish Swedish]
|
509
|
+
end
|
510
|
+
|
511
|
+
it 'in a parameter list' do
|
512
|
+
browser.select_list(name: 'new_user_languages').clear
|
513
|
+
browser.select_list(name: 'new_user_languages').select!('Danish', 'Swedish')
|
514
|
+
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq %w[Danish Swedish]
|
515
|
+
end
|
516
|
+
|
517
|
+
it 'based on text' do
|
518
|
+
browser.select_list(name: 'new_user_languages').clear
|
519
|
+
browser.select_list(name: 'new_user_languages').select!([/ish/])
|
520
|
+
list = %w[Danish EN Swedish]
|
521
|
+
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
|
522
|
+
end
|
523
|
+
|
524
|
+
it 'based on label and single regexp' do
|
525
|
+
browser.select_list(name: 'new_user_languages').clear
|
526
|
+
browser.select_list(name: 'new_user_languages').select!([/NO|EN/])
|
527
|
+
list = %w[EN NO]
|
528
|
+
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
|
529
|
+
end
|
530
|
+
|
531
|
+
it 'based on label and multiple regexp' do
|
532
|
+
browser.select_list(name: 'new_user_languages').clear
|
533
|
+
browser.select_list(name: 'new_user_languages').select!([/NO/, /EN/])
|
534
|
+
list = %w[EN NO]
|
535
|
+
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
|
536
|
+
end
|
537
|
+
|
538
|
+
it 'from an Array' do
|
539
|
+
browser.select_list(name: 'new_user_languages').clear
|
540
|
+
browser.select_list(name: 'new_user_languages').select!([/ish/, /Latin/])
|
541
|
+
list = ['Danish', 'EN', 'Swedish', 'Azeri - Latin', 'Latin']
|
542
|
+
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
|
543
|
+
end
|
544
|
+
|
545
|
+
it 'from multiple arguments' do
|
546
|
+
browser.select_list(name: 'new_user_languages').clear
|
547
|
+
browser.select_list(name: 'new_user_languages').select!(/ish/, /Latin/)
|
548
|
+
list = ['Danish', 'EN', 'Swedish', 'Azeri - Latin', 'Latin']
|
549
|
+
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
|
550
|
+
end
|
551
|
+
|
552
|
+
it 'returns the first matching value if there are multiple matches' do
|
553
|
+
expect(browser.select_list(name: 'new_user_languages').select!([/ish/])).to eq 'Danish'
|
554
|
+
end
|
555
|
+
end
|
467
556
|
end
|
468
557
|
|
469
558
|
describe '#select_all' do
|
470
559
|
it 'selects multiple options based on text' do
|
471
560
|
browser.select_list(name: 'new_user_languages').clear
|
472
|
-
|
561
|
+
expect {
|
562
|
+
browser.select_list(name: 'new_user_languages').select_all(/ish/)
|
563
|
+
}.to have_deprecated_select_all
|
473
564
|
list = %w[Danish EN Swedish]
|
474
565
|
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
|
475
566
|
end
|
476
567
|
|
477
568
|
it 'selects multiple options based on labels' do
|
478
569
|
browser.select_list(name: 'new_user_languages').clear
|
479
|
-
|
570
|
+
expect {
|
571
|
+
browser.select_list(name: 'new_user_languages').select_all(/NO|EN/)
|
572
|
+
}.to have_deprecated_select_all
|
480
573
|
list = %w[EN NO]
|
481
574
|
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
|
482
575
|
end
|
483
576
|
|
484
577
|
it 'selects all options in an Array' do
|
485
578
|
browser.select_list(name: 'new_user_languages').clear
|
486
|
-
|
579
|
+
expect {
|
580
|
+
browser.select_list(name: 'new_user_languages').select_all([/ish/, /Latin/])
|
581
|
+
}.to have_deprecated_select_all
|
487
582
|
list = ['Danish', 'EN', 'Swedish', 'Azeri - Latin', 'Latin']
|
488
583
|
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
|
489
584
|
end
|
490
585
|
|
491
586
|
it 'selects all options in a parameter list' do
|
492
587
|
browser.select_list(name: 'new_user_languages').clear
|
493
|
-
|
588
|
+
expect {
|
589
|
+
browser.select_list(name: 'new_user_languages').select_all(/ish/, /Latin/)
|
590
|
+
}.to have_deprecated_select_all
|
494
591
|
list = ['Danish', 'EN', 'Swedish', 'Azeri - Latin', 'Latin']
|
495
592
|
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
|
496
593
|
end
|
497
594
|
|
498
595
|
it 'returns the first matching value if there are multiple matches' do
|
499
|
-
expect
|
596
|
+
expect {
|
597
|
+
expect(browser.select_list(name: 'new_user_languages').select_all(/ish/)).to eq 'Danish'
|
598
|
+
}.to have_deprecated_select_all
|
500
599
|
end
|
501
600
|
end
|
502
601
|
|
503
602
|
describe '#select_all!' do
|
504
603
|
it 'selects multiple options based on value' do
|
505
604
|
browser.select_list(name: 'new_user_languages').clear
|
506
|
-
|
605
|
+
expect {
|
606
|
+
browser.select_list(name: 'new_user_languages').select_all!(/\d+/)
|
607
|
+
}.to have_deprecated_select_all
|
507
608
|
list = %w[Danish EN NO Russian]
|
508
609
|
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
|
509
610
|
end
|
510
611
|
|
511
612
|
it 'selects multiple options based on text' do
|
512
613
|
browser.select_list(name: 'new_user_languages').clear
|
513
|
-
|
614
|
+
expect {
|
615
|
+
browser.select_list(name: 'new_user_languages').select_all!(/ish/)
|
616
|
+
}.to have_deprecated_select_all
|
514
617
|
list = %w[Danish EN Swedish]
|
515
618
|
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
|
516
619
|
end
|
517
620
|
|
518
621
|
it 'selects multiple options based on labels' do
|
519
622
|
browser.select_list(name: 'new_user_languages').clear
|
520
|
-
|
623
|
+
expect {
|
624
|
+
browser.select_list(name: 'new_user_languages').select_all!(/NO|EN/)
|
625
|
+
}.to have_deprecated_select_all
|
521
626
|
list = %w[EN NO]
|
522
627
|
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
|
523
628
|
end
|
524
629
|
|
525
630
|
it 'selects all options in an Array' do
|
526
631
|
browser.select_list(name: 'new_user_languages').clear
|
527
|
-
|
632
|
+
expect {
|
633
|
+
browser.select_list(name: 'new_user_languages').select_all!([/ish/, /Latin/])
|
634
|
+
}.to have_deprecated_select_all
|
528
635
|
list = ['Danish', 'EN', 'Swedish', 'Azeri - Latin', 'Latin']
|
529
636
|
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
|
530
637
|
end
|
531
638
|
|
532
639
|
it 'selects all options in a parameter list' do
|
533
640
|
browser.select_list(name: 'new_user_languages').clear
|
534
|
-
|
641
|
+
expect {
|
642
|
+
browser.select_list(name: 'new_user_languages').select_all!(/ish/, /Latin/)
|
643
|
+
}.to have_deprecated_select_all
|
535
644
|
list = ['Danish', 'EN', 'Swedish', 'Azeri - Latin', 'Latin']
|
536
645
|
expect(browser.select_list(name: 'new_user_languages').selected_options.map(&:text)).to eq list
|
537
646
|
end
|
538
647
|
|
539
648
|
it 'returns the first matching value if there are multiple matches' do
|
540
|
-
expect
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
# deprecate?
|
545
|
-
not_compliant_on :safari do
|
546
|
-
describe '#select_value' do
|
649
|
+
expect {
|
650
|
+
expect(browser.select_list(name: 'new_user_languages').select_all!(/ish/)).to eq 'Danish'
|
651
|
+
}.to have_deprecated_select_all
|
547
652
|
end
|
548
653
|
end
|
549
654
|
end
|