"Fossies" - the Fresh Open Source Software Archive 
Member "selenium-selenium-4.8.1/rb/spec/integration/selenium/webdriver/target_locator_spec.rb" (17 Feb 2023, 12104 Bytes) of package /linux/www/selenium-selenium-4.8.1.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Ruby source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
See also the last
Fossies "Diffs" side-by-side code changes report for "target_locator_spec.rb":
4.7.0_vs_4.8.0.
1 # frozen_string_literal: true
2
3 # Licensed to the Software Freedom Conservancy (SFC) under one
4 # or more contributor license agreements. See the NOTICE file
5 # distributed with this work for additional information
6 # regarding copyright ownership. The SFC licenses this file
7 # to you under the Apache License, Version 2.0 (the
8 # "License"); you may not use this file except in compliance
9 # with the License. You may obtain a copy of the License at
10 #
11 # http://www.apache.org/licenses/LICENSE-2.0
12 #
13 # Unless required by applicable law or agreed to in writing,
14 # software distributed under the License is distributed on an
15 # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 # KIND, either express or implied. See the License for the
17 # specific language governing permissions and limitations
18 # under the License.
19
20 require_relative 'spec_helper'
21
22 module Selenium
23 module WebDriver
24 describe TargetLocator do
25 before { @original_window = driver.window_handle }
26
27 after do
28 handles = driver.window_handles
29 driver.switch_to.window(@original_window) if handles.include?(@original_window)
30
31 (handles - [driver.window_handle]).each do |handle|
32 driver.switch_to.window(handle) { driver.close }
33 end
34 end
35
36 let(:new_window) { driver.window_handles.find { |handle| handle != driver.window_handle } }
37
38 it 'finds the active element' do
39 driver.navigate.to url_for('xhtmlTest.html')
40 expect(driver.switch_to.active_element).to be_an_instance_of(WebDriver::Element)
41 end
42
43 # Doesn't switch to frame by id directly
44 it 'switches to a frame directly' do
45 driver.navigate.to url_for('iframes.html')
46 driver.switch_to.frame('iframe1')
47
48 expect(driver.find_element(name: 'login')).to be_a(WebDriver::Element)
49 end
50
51 it 'switches to a frame by Element' do
52 driver.navigate.to url_for('iframes.html')
53
54 iframe = driver.find_element(tag_name: 'iframe')
55 driver.switch_to.frame(iframe)
56
57 expect(driver.find_element(name: 'login')).to be_a(WebDriver::Element)
58 end
59
60 it 'switches to parent frame' do
61 driver.navigate.to url_for('iframes.html')
62
63 iframe = driver.find_element(tag_name: 'iframe')
64 driver.switch_to.frame(iframe)
65
66 expect(driver.find_element(name: 'login')).to be_a(WebDriver::Element)
67
68 driver.switch_to.parent_frame
69 expect(driver.find_element(id: 'iframe_page_heading')).to be_a(WebDriver::Element)
70 end
71
72 context 'when switching windows' do
73 describe '#new_window' do
74 it 'switches to a new window' do
75 driver.switch_to.new_window(:window)
76
77 expect(driver.window_handles.size).to eq 2
78 expect(driver.window_handle).not_to eq @original_window
79 end
80
81 it 'switches to a new tab' do
82 driver.switch_to.new_window(:tab)
83
84 expect(driver.window_handles.size).to eq 2
85 expect(driver.window_handle).not_to eq @original_window
86 end
87
88 it 'raises exception when the new window type is not recognized' do
89 expect {
90 driver.switch_to.new_window(:unknown)
91 }.to raise_error(ArgumentError)
92 end
93
94 it 'switches to the new window then close it when given a block' do
95 driver.switch_to.new_window do
96 expect(driver.window_handles.size).to eq 2
97 end
98
99 expect(driver.window_handles.size).to eq 1
100 expect(driver.window_handle).to eq @original_window
101 end
102
103 it 'does not error if switching to a new window with a block that closes window' do
104 expect {
105 driver.switch_to.new_window { driver.close }
106 }.not_to raise_exception
107 end
108 end
109
110 it 'switches to a window and back when given a block' do
111 driver.navigate.to url_for('xhtmlTest.html')
112
113 driver.find_element(link: 'Open new window').click
114 wait.until { driver.window_handles.size == 2 }
115 expect(driver.title).to eq('XHTML Test Page')
116
117 driver.switch_to.window(new_window) do
118 wait.until { driver.title == 'We Arrive Here' }
119 end
120
121 wait.until { driver.title == 'XHTML Test Page' }
122 end
123
124 it 'handles exceptions inside the block' do
125 driver.navigate.to url_for('xhtmlTest.html')
126
127 driver.find_element(link: 'Open new window').click
128 wait.until { driver.window_handles.size == 2 }
129 expect(driver.title).to eq('XHTML Test Page')
130
131 expect {
132 driver.switch_to.window(new_window) { raise 'foo' }
133 }.to raise_error(RuntimeError, 'foo')
134
135 expect(driver.title).to eq('XHTML Test Page')
136 end
137
138 it 'switches to a window without a block' do
139 driver.navigate.to url_for('xhtmlTest.html')
140
141 driver.find_element(link: 'Open new window').click
142 wait.until { driver.window_handles.size == 2 }
143 expect(driver.title).to eq('XHTML Test Page')
144
145 driver.switch_to.window(new_window)
146 wait.until { driver.title == 'We Arrive Here' }
147 expect(driver.title).to eq('We Arrive Here')
148 end
149
150 it 'uses the original window if the block closes the popup' do
151 driver.navigate.to url_for('xhtmlTest.html')
152
153 driver.find_element(link: 'Open new window').click
154 wait.until { driver.window_handles.size == 2 }
155 expect(driver.title).to eq('XHTML Test Page')
156
157 driver.switch_to.window(new_window) do
158 wait.until { driver.title == 'We Arrive Here' }
159 driver.close
160 end
161
162 expect(driver.current_url).to include('xhtmlTest.html')
163 expect(driver.title).to eq('XHTML Test Page')
164 end
165 end
166
167 context 'with more than two windows', except: [{browser: %i[safari safari_preview]},
168 {driver: :remote, browser: :ie}] do
169 it 'closes current window via block' do
170 driver.navigate.to url_for('xhtmlTest.html')
171 wait_for_element(link: 'Create a new anonymous window')
172 driver.find_element(link: 'Create a new anonymous window').click
173 wait.until { driver.window_handles.size == 2 }
174 driver.find_element(link: 'Open new window').click
175 wait.until { driver.window_handles.size == 3 }
176 driver.switch_to.window(new_window)
177
178 driver.switch_to.window(driver.window_handle) { driver.close }
179 expect(driver.window_handles.size).to eq 2
180 end
181
182 it 'closes another window' do
183 driver.navigate.to url_for('xhtmlTest.html')
184 wait_for_element(link: 'Create a new anonymous window')
185 driver.find_element(link: 'Create a new anonymous window').click
186 wait.until { driver.window_handles.size == 2 }
187 driver.find_element(link: 'Open new window').click
188 wait.until { driver.window_handles.size == 3 }
189
190 window_to_close = driver.window_handles.last
191
192 driver.switch_to.window(window_to_close) { driver.close }
193 expect(driver.window_handles.size).to eq 2
194 end
195
196 it 'iterates over open windows when current window is not closed' do
197 driver.navigate.to url_for('xhtmlTest.html')
198 wait_for_element(link: 'Create a new anonymous window')
199 driver.find_element(link: 'Create a new anonymous window').click
200 wait.until { driver.window_handles.size == 2 }
201 driver.find_element(link: 'Open new window').click
202 wait.until { driver.window_handles.size == 3 }
203
204 titles = {}
205 driver.window_handles.each do |wh|
206 driver.switch_to.window(wh) { titles[driver.title] = driver.window_handle }
207 end
208
209 handle = titles['We Arrive Here']
210
211 driver.switch_to.window(handle)
212 expect(driver.title).to eq('We Arrive Here')
213 end
214
215 it 'iterates over open windows when current window is closed' do
216 driver.navigate.to url_for('xhtmlTest.html')
217 wait_for_element(link: 'Create a new anonymous window')
218 driver.find_element(link: 'Create a new anonymous window').click
219 wait.until { driver.window_handles.size == 2 }
220 driver.find_element(link: 'Open new window').click
221 wait.until { driver.window_handles.size == 3 }
222
223 driver.close
224
225 titles = {}
226 driver.window_handles.each do |wh|
227 driver.switch_to.window(wh) { titles[driver.title] = wh }
228 end
229
230 handle = titles['We Arrive Here']
231 driver.switch_to.window(handle)
232 expect(driver.title).to eq('We Arrive Here')
233 end
234 end
235
236 it 'switches to a window and execute a block when current window is closed' do
237 driver.navigate.to url_for('xhtmlTest.html')
238 driver.find_element(link: 'Open new window').click
239 wait.until { driver.window_handles.size == 2 }
240
241 driver.switch_to.window(new_window)
242 wait.until { driver.title == 'We Arrive Here' }
243
244 driver.close
245
246 driver.switch_to.window(driver.window_handles.first) do
247 wait.until { driver.title == 'XHTML Test Page' }
248 end
249
250 expect(driver.title).to eq('XHTML Test Page')
251 end
252
253 it 'switches to default content' do
254 driver.navigate.to url_for('iframes.html')
255
256 driver.switch_to.frame 0
257 driver.switch_to.default_content
258
259 expect(driver.find_elements(id: 'iframe_page_heading').size).to be_positive
260 end
261
262 # Edge BUG - https://connect.microsoft.com/IE/feedback/details/1850030
263 describe 'alerts' do
264 it 'allows the user to accept an alert' do
265 driver.navigate.to url_for('alerts.html')
266 driver.find_element(id: 'alert').click
267
268 alert = wait_for_alert
269 alert.accept
270 wait_for_no_alert
271
272 expect(driver.title).to eq('Testing Alerts')
273 end
274
275 it 'allows the user to dismiss an alert' do
276 driver.navigate.to url_for('alerts.html')
277 driver.find_element(id: 'alert').click
278
279 alert = wait_for_alert
280 alert.dismiss
281 wait_for_no_alert
282
283 expect(driver.title).to eq('Testing Alerts')
284 end
285
286 it 'allows the user to set the value of a prompt' do
287 driver.navigate.to url_for('alerts.html')
288 driver.find_element(id: 'prompt').click
289
290 alert = wait_for_alert
291 alert.send_keys 'cheese'
292 alert.accept
293
294 text = driver.find_element(id: 'text').text
295 expect(text).to eq('cheese')
296 end
297
298 it 'allows the user to get the text of an alert' do
299 driver.navigate.to url_for('alerts.html')
300 driver.find_element(id: 'alert').click
301
302 alert = wait_for_alert
303 text = alert.text
304 alert.accept
305
306 expect(text).to eq('cheese')
307 wait_for_no_alert
308 end
309
310 it 'raises when calling #text on a closed alert' do
311 driver.navigate.to url_for('alerts.html')
312 wait_for_element(id: 'alert')
313
314 driver.find_element(id: 'alert').click
315
316 alert = wait_for_alert
317 alert.accept
318
319 wait_for_no_alert
320 expect { alert.text }.to raise_error(Selenium::WebDriver::Error::NoSuchAlertError)
321 end
322
323 it 'raises NoAlertOpenError if no alert is present' do
324 expect { driver.switch_to.alert }.to raise_error(Selenium::WebDriver::Error::NoSuchAlertError)
325 end
326
327 describe 'unhandled alert error' do
328 after { reset_driver! }
329
330 it 'raises an UnexpectedAlertOpenError if an alert has not been dealt with' do
331 driver.navigate.to url_for('alerts.html')
332 driver.find_element(id: 'alert').click
333 wait_for_alert
334
335 expect { driver.title }.to raise_error(Selenium::WebDriver::Error::UnexpectedAlertOpenError)
336 end
337 end
338 end
339 end
340 end # WebDriver
341 end # Selenium