watir 6.16.2 → 6.18.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. checksums.yaml +5 -5
  2. data/.github/actions/enable-safari/action.yml +11 -0
  3. data/.github/actions/install-chrome/action.yml +11 -0
  4. data/.github/workflows/linux.yml +61 -0
  5. data/.github/workflows/mac.yml +55 -0
  6. data/.github/workflows/unit.yml +31 -0
  7. data/.github/workflows/windows.yml +39 -0
  8. data/.rubocop.yml +32 -107
  9. data/.rubocop_todo.yml +36 -0
  10. data/CHANGES.md +42 -0
  11. data/Gemfile +3 -1
  12. data/LICENSE +2 -2
  13. data/README.md +9 -10
  14. data/Rakefile +4 -4
  15. data/lib/watir-webdriver.rb +1 -1
  16. data/lib/watir.rb +1 -1
  17. data/lib/watir/adjacent.rb +8 -10
  18. data/lib/watir/after_hooks.rb +4 -4
  19. data/lib/watir/alert.rb +1 -0
  20. data/lib/watir/attribute_helper.rb +2 -0
  21. data/lib/watir/browser.rb +7 -3
  22. data/lib/watir/capabilities.rb +9 -6
  23. data/lib/watir/cookies.rb +3 -1
  24. data/lib/watir/element_collection.rb +21 -6
  25. data/lib/watir/elements/element.rb +66 -53
  26. data/lib/watir/elements/file_field.rb +1 -0
  27. data/lib/watir/elements/html_elements.rb +0 -1
  28. data/lib/watir/elements/iframe.rb +4 -3
  29. data/lib/watir/elements/link.rb +0 -9
  30. data/lib/watir/elements/radio.rb +1 -1
  31. data/lib/watir/elements/select.rb +22 -7
  32. data/lib/watir/generator/base/spec_extractor.rb +4 -4
  33. data/lib/watir/generator/html/generator.rb +1 -1
  34. data/lib/watir/has_window.rb +17 -15
  35. data/lib/watir/js_execution.rb +3 -3
  36. data/lib/watir/js_snippets.rb +2 -2
  37. data/lib/watir/legacy_wait.rb +1 -1
  38. data/lib/watir/locators.rb +1 -3
  39. data/lib/watir/locators/element/locator.rb +22 -12
  40. data/lib/watir/locators/element/selector_builder.rb +12 -13
  41. data/lib/watir/locators/element/selector_builder/xpath.rb +40 -13
  42. data/lib/watir/locators/text_field/matcher.rb +1 -1
  43. data/lib/watir/locators/text_field/selector_builder/xpath.rb +3 -1
  44. data/lib/watir/logger.rb +7 -20
  45. data/lib/watir/radio_set.rb +2 -2
  46. data/lib/watir/user_editable.rb +6 -2
  47. data/lib/watir/version.rb +1 -1
  48. data/lib/watir/wait.rb +2 -0
  49. data/lib/watir/wait/timer.rb +1 -1
  50. data/lib/watir/window.rb +8 -4
  51. data/lib/watir/window_collection.rb +105 -0
  52. data/lib/watirspec.rb +2 -1
  53. data/lib/watirspec/guards.rb +1 -1
  54. data/lib/watirspec/implementation.rb +3 -5
  55. data/lib/watirspec/rake_tasks.rb +2 -0
  56. data/lib/watirspec/runner.rb +5 -1
  57. data/lib/watirspec/server.rb +1 -1
  58. data/spec/spec_helper.rb +2 -7
  59. data/spec/unit/container_spec.rb +1 -1
  60. data/spec/unit/logger_spec.rb +5 -7
  61. data/spec/unit/match_elements/element_spec.rb +17 -15
  62. data/spec/unit/selector_builder/button_spec.rb +16 -15
  63. data/spec/unit/selector_builder/element_spec.rb +58 -9
  64. data/spec/unit/selector_builder/text_field_spec.rb +14 -14
  65. data/spec/unit/unit_helper.rb +2 -4
  66. data/spec/watirspec/after_hooks_spec.rb +58 -68
  67. data/spec/watirspec/alert_spec.rb +69 -79
  68. data/spec/watirspec/browser_spec.rb +51 -48
  69. data/spec/watirspec/cookies_spec.rb +52 -37
  70. data/spec/watirspec/drag_and_drop_spec.rb +14 -38
  71. data/spec/watirspec/elements/button_spec.rb +2 -0
  72. data/spec/watirspec/elements/buttons_spec.rb +1 -1
  73. data/spec/watirspec/elements/checkbox_spec.rb +8 -4
  74. data/spec/watirspec/elements/date_field_spec.rb +18 -9
  75. data/spec/watirspec/elements/date_time_field_spec.rb +3 -4
  76. data/spec/watirspec/elements/div_spec.rb +62 -54
  77. data/spec/watirspec/elements/element_spec.rb +73 -88
  78. data/spec/watirspec/elements/elements_spec.rb +12 -3
  79. data/spec/watirspec/elements/filefield_spec.rb +25 -50
  80. data/spec/watirspec/elements/form_spec.rb +6 -8
  81. data/spec/watirspec/elements/frame_spec.rb +10 -13
  82. data/spec/watirspec/elements/iframe_spec.rb +12 -9
  83. data/spec/watirspec/elements/iframes_spec.rb +2 -2
  84. data/spec/watirspec/elements/link_spec.rb +23 -12
  85. data/spec/watirspec/elements/links_spec.rb +11 -3
  86. data/spec/watirspec/elements/option_spec.rb +15 -17
  87. data/spec/watirspec/elements/select_list_spec.rb +222 -117
  88. data/spec/watirspec/elements/text_field_spec.rb +8 -4
  89. data/spec/watirspec/elements/tr_spec.rb +0 -9
  90. data/spec/watirspec/html/forms_with_input_elements.html +1 -0
  91. data/spec/watirspec/html/iframes.html +3 -0
  92. data/spec/watirspec/html/non_control_elements.html +4 -4
  93. data/spec/watirspec/html/right_click.html +12 -0
  94. data/spec/watirspec/html/wait.html +6 -6
  95. data/spec/watirspec/html/window_switching.html +10 -0
  96. data/spec/watirspec/legacy_wait_spec.rb +216 -0
  97. data/spec/watirspec/support/rspec_matchers.rb +17 -13
  98. data/spec/watirspec/user_editable_spec.rb +1 -1
  99. data/spec/watirspec/wait_spec.rb +257 -305
  100. data/spec/watirspec/window_switching_spec.rb +332 -211
  101. data/spec/watirspec_helper.rb +16 -19
  102. data/support/doctest_helper.rb +0 -2
  103. data/watir.gemspec +6 -7
  104. metadata +36 -26
  105. data/.travis.yml +0 -84
  106. data/appveyor.yml +0 -12
  107. data/lib/watir/elements/area.rb +0 -10
  108. 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
- expect(container.elements(visible_text: 'none visible').count).to eq(0)
45
- expect(container.elements(visible_text: /none visible/).count).to eq(0)
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
- not_compliant_on :safari do
96
- bug 'https://github.com/mozilla/geckodriver/issues/858', :firefox do
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
- path = File.expand_path(__FILE__)
101
- element = browser.file_field(name: 'new_user_portrait')
98
+ element = browser.file_field(name: 'new_user_portrait')
99
+ element.upload __FILE__
102
100
 
103
- element.set path
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
- expect(element.value).to include(File.basename(path)) # only some browser will return the full path
106
- expect(messages.first).to include(File.basename(path))
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
- it 'raises an error if the file does not exist' do
113
- expect {
114
- browser.file_field.set(File.join(Dir.tmpdir, 'unlikely-to-exist'))
115
- }.to raise_error(Errno::ENOENT)
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
- not_compliant_on :safari do
121
- describe '#value=' do
122
- bug 'https://github.com/mozilla/geckodriver/issues/858', :firefox do
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
- element.value = path
130
- expect(element.value).to include(File.basename(path)) # only some browser will return the full path
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
- # only some browsers will return the full path
143
- expect(browser.file_field.value).to include(File.basename(expected))
144
- end
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
- not_compliant_on :internet_explorer, %i[chrome windows] do
148
- bug 'Raises InvalidArgumentError: File not found', :firefox do
149
- it 'does not alter its argument' do
150
- value = File.expand_path '.travis.yml'
151
- browser.file_field.value = value
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
- not_compliant_on :safari do
55
- it 'triggers onsubmit event and takes its result into account' do
56
- form = browser.form(name: 'user_new')
57
- form.submit
58
- expect(form).to exist
59
- expect(messages.size).to eq 1
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
- not_compliant_on :safari do
13
- it 'handles crossframe javascript' do
14
- expect(browser.frame(id: 'frame_1').text_field(name: 'senderElement').value).to eq 'send_this_value'
15
- expect(browser.frame(id: 'frame_2').text_field(name: 'recieverElement').value).to eq 'old_value'
16
- browser.frame(id: 'frame_1').button(id: 'send').click
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
- not_compliant_on :safari do
54
- it 'handles nested frames' do
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
- browser.frame(id: 'two').frame(id: 'three').link(id: 'four').click
54
+ browser.frame(id: 'two').frame(id: 'three').link(id: 'four').click
58
55
 
59
- Watir::Wait.until { browser.title == 'definition_lists' }
60
- end
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], %i[firefox appveyor] do
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 false if an element in an iframe does exist' do
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 if an element in an iframe does not exist' do
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
- not_compliant_on :safari do
116
- it 'handles nested iframes' do
117
- browser.goto(WatirSpec.url_for('nested_iframes.html'))
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
- Watir::Wait.until { browser.title == 'definition_lists' }
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: 'iframe_2')
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 2
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
- it 'finds an existing link by (index: Integer) and clicks it' do
138
- browser.link(index: 2).click
139
- expect(browser.text.include?('User administration')).to be true
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
- it 'clicks a link with no text content but an img child' do
147
- browser.goto WatirSpec.url_for('images.html')
148
- browser.link(href: /definition_lists.html/).click
149
- Watir::Wait.while { browser.title == 'Images' || browser.title == '' }
150
- expect(browser.title).to eq 'definition_lists'
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\:(Fixnum|Integer)/
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
- expect(container.links(visible_text: 'none visible').count).to eq(0)
52
- expect(container.links(visible_text: /none visible/).count).to eq(0)
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
- not_compliant_on :safari do
70
- it 'selects the chosen option (page context)' do
71
- browser.option(text: 'Denmark').select
72
- expect(browser.select_list(name: 'new_user_country').selected_options.map(&:text)).to eq ['Denmark']
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
- it 'selects the chosen option (select_list context)' do
76
- browser.select_list(name: 'new_user_country').option(text: 'Denmark').select
77
- expect(browser.select_list(name: 'new_user_country').selected_options.map(&:text)).to eq ['Denmark']
78
- end
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
- it 'selects the option when found by text (page context)' do
81
- browser.option(text: 'Sweden').select
82
- expect(browser.option(text: 'Sweden')).to be_selected
83
- end
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
- it 'selects the option when found by text (select_list context)' do
86
- browser.select_list(name: 'new_user_country').option(text: 'Sweden').select
87
- expect(browser.select_list(name: 'new_user_country').option(text: 'Sweden')).to be_selected
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
- not_compliant_on :safari do
79
- it 'returns the value of the selected option' do
80
- expect(browser.select_list(index: 0).value).to eq '2'
81
- browser.select_list(index: 0).select(/Sweden/)
82
- expect(browser.select_list(index: 0).value).to eq '3'
83
- end
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
- not_compliant_on :safari do
93
- it 'returns the text of the selected option' do
94
- expect(browser.select_list(index: 0).text).to eq 'Norway'
95
- browser.select_list(index: 0).select(/Sweden/)
96
- expect(browser.select_list(index: 0).text).to eq 'Sweden'
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
- it "raises UnknownObjectException if the select list doesn't exist" do
100
- expect { browser.select_list(index: 1337).text }.to raise_unknown_object_exception
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
- not_compliant_on :safari do
172
- it 'clears the selection when possible' do
173
- browser.select_list(name: 'new_user_languages').clear
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
- not_compliant_on :safari do
191
- it 'fires onchange event' do
192
- browser.select_list(name: 'new_user_languages').clear
193
- expect(messages.size).to eq 2
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
- it "doesn't fire onchange event for already cleared option" do
197
- browser.select_list(name: 'new_user_languages').option.clear
198
- expect(messages.size).to eq 0
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
- not_compliant_on :safari do
218
- describe '#selected?' do
219
- it 'returns true if the given option is selected by text' do
220
- browser.select_list(name: 'new_user_country').select('Denmark')
221
- expect(browser.select_list(name: 'new_user_country')).to be_selected('Denmark')
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
- it 'returns false if the given option is not selected by text' do
225
- expect(browser.select_list(name: 'new_user_country')).to_not be_selected('Sweden')
226
- end
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
- it 'returns true if the given option is selected by label' do
229
- browser.select_list(name: 'new_user_country').select('Germany')
230
- expect(browser.select_list(name: 'new_user_country')).to be_selected('Germany')
231
- end
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
- it 'returns false if the given option is not selected by label' do
234
- expect(browser.select_list(name: 'new_user_country')).to_not be_selected('Germany')
235
- end
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
- it "raises UnknownObjectException if the option doesn't exist" do
238
- expect { browser.select_list(name: 'new_user_country').selected?('missing_option') }
239
- .to raise_unknown_object_exception
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 { browser.select_list(name: 'new_user_languages').select(/1|3/) }.to have_deprecated_select_by
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 successiveley' do
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
- it 'selects each item in an Array' do
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
- not_compliant_on :safari do
316
- it 'fires onchange event when selecting an item' do
317
- browser.select_list(id: 'new_user_languages').select('Danish')
318
- expect(messages).to eq ['changed language']
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
- it "doesn't fire onchange event when selecting an already selected item" do
322
- browser.select_list(id: 'new_user_languages').clear # removes the two pre-selected options
323
- browser.select_list(id: 'new_user_languages').select('English')
324
- expect(messages.size).to eq 3
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
- browser.select_list(id: 'new_user_languages').select('English')
327
- expect(messages.size).to eq 3
328
- end
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
- it 'raises ObjectDisabledException if the option is disabled' do
357
- expect { browser.select_list(name: 'new_user_languages').select('Russian') }
358
- .to raise_object_disabled_exception
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 each item in an Array' do
415
- browser.select_list(name: 'new_user_languages').clear
416
- browser.select_list(name: 'new_user_languages').select!(%w[Danish Swedish])
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
- it 'raises ObjectDisabledException if the option is disabled' do
458
- browser.select_list(id: 'new_user_languages').clear
459
- expect { browser.select_list(id: 'new_user_languages').select!('Russian') }
460
- .to raise_object_disabled_exception
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
- browser.select_list(name: 'new_user_languages').select_all(/ish/)
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
- browser.select_list(name: 'new_user_languages').select_all(/NO|EN/)
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
- browser.select_list(name: 'new_user_languages').select_all([/ish/, /Latin/])
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
- browser.select_list(name: 'new_user_languages').select_all(/ish/, /Latin/)
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(browser.select_list(name: 'new_user_languages').select_all(/ish/)).to eq 'Danish'
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
- browser.select_list(name: 'new_user_languages').select_all!(/\d+/)
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
- browser.select_list(name: 'new_user_languages').select_all!(/ish/)
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
- browser.select_list(name: 'new_user_languages').select_all!(/NO|EN/)
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
- browser.select_list(name: 'new_user_languages').select_all!([/ish/, /Latin/])
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
- browser.select_list(name: 'new_user_languages').select_all!(/ish/, /Latin/)
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(browser.select_list(name: 'new_user_languages').select_all!(/ish/)).to eq 'Danish'
541
- end
542
- end
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