"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