blob: 8ce87f6e8f00b06e36de92df1e5807a347c0f187 [file] [log] [blame]
# Licensed to the Software Freedom Conservancy (SFC) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The SFC licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
import pytest
from selenium.common.exceptions import NoSuchWindowException
from selenium.common.exceptions import WebDriverException
from selenium.webdriver.common.by import By
from selenium.webdriver.common.window import WindowTypes
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
@pytest.fixture(autouse=True)
def close_windows(driver):
main_windows_handle = driver.current_window_handle
yield
try:
from urllib import request as url_request
except ImportError:
import urllib2 as url_request
URLError = url_request.URLError
try:
window_handles = driver.window_handles
except URLError:
return
for handle in window_handles:
if handle != main_windows_handle:
driver.switch_to.window(handle)
driver.close()
driver.switch_to.window(main_windows_handle)
def testShouldSwitchFocusToANewWindowWhenItIsOpenedAndNotStopFutureOperations(driver, pages):
pages.load("xhtmlTest.html")
current = driver.current_window_handle
driver.find_element_by_link_text("Open new window").click()
assert driver.title == "XHTML Test Page"
handles = driver.window_handles
handles.remove(current)
driver.switch_to.window(handles[0])
assert driver.title == "We Arrive Here"
pages.load("iframes.html")
handle = driver.current_window_handle
driver.find_element_by_id("iframe_page_heading")
driver.switch_to.frame(driver.find_element(By.ID, "iframe1"))
assert driver.current_window_handle == handle
def testCanSwitchToWindowByName(driver, pages):
pages.load("xhtmlTest.html")
handles = driver.window_handles
driver.find_element(By.LINK_TEXT, "Open new window").click()
WebDriverWait(driver, 3).until(EC.new_window_is_opened(handles))
driver.switch_to.window("result")
assert driver.title == "We Arrive Here"
def testShouldThrowNoSuchWindowException(driver, pages):
pages.load("xhtmlTest.html")
with pytest.raises(NoSuchWindowException):
driver.switch_to.window("invalid name")
def testShouldThrowNoSuchWindowExceptionOnAnAttemptToGetItsHandle(driver, pages):
pages.load("xhtmlTest.html")
current = driver.current_window_handle
handles = driver.window_handles
driver.find_element(By.LINK_TEXT, "Open new window").click()
WebDriverWait(driver, 3).until(EC.new_window_is_opened(handles))
handles = driver.window_handles
handles.remove(current)
driver.switch_to.window(handles[0])
driver.close()
with pytest.raises(NoSuchWindowException):
driver.current_window_handle
@pytest.mark.xfail_ie
def testShouldThrowNoSuchWindowExceptionOnAnyOperationIfAWindowIsClosed(driver, pages):
pages.load("xhtmlTest.html")
current = driver.current_window_handle
handles = driver.window_handles
driver.find_element(By.LINK_TEXT, "Open new window").click()
WebDriverWait(driver, 3).until(EC.new_window_is_opened(handles))
handles = driver.window_handles
handles.remove(current)
driver.switch_to.window(handles[0])
driver.close()
with pytest.raises(NoSuchWindowException):
driver.title
with pytest.raises(NoSuchWindowException):
driver.find_element_by_tag_name("body")
@pytest.mark.xfail_ie
def testShouldThrowNoSuchWindowExceptionOnAnyElementOperationIfAWindowIsClosed(driver, pages):
pages.load("xhtmlTest.html")
current = driver.current_window_handle
handles = driver.window_handles
driver.find_element(By.LINK_TEXT, "Open new window").click()
WebDriverWait(driver, 3).until(EC.new_window_is_opened(handles))
handles = driver.window_handles
handles.remove(current)
driver.switch_to.window(handles[0])
element = driver.find_element_by_tag_name("body")
driver.close()
with pytest.raises(NoSuchWindowException):
element.text
def testClickingOnAButtonThatClosesAnOpenWindowDoesNotCauseTheBrowserToHang(driver, pages):
pages.load("xhtmlTest.html")
current = driver.current_window_handle
handles = driver.window_handles
driver.find_element_by_name("windowThree").click()
WebDriverWait(driver, 3).until(EC.new_window_is_opened(handles))
handles = driver.window_handles
handles.remove(current)
driver.switch_to.window(handles[0])
driver.find_element_by_id("close").click()
driver.switch_to.window(current)
driver.find_element_by_id("linkId")
def testCanCallGetWindowHandlesAfterClosingAWindow(driver, pages):
pages.load("xhtmlTest.html")
current = driver.current_window_handle
handles = driver.window_handles
driver.find_element_by_name("windowThree").click()
WebDriverWait(driver, 3).until(EC.new_window_is_opened(handles))
handles = driver.window_handles
handles.remove(current)
driver.switch_to.window(handles[0])
driver.find_element_by_id("close").click()
WebDriverWait(driver, 3).until(EC.number_of_windows_to_be(1))
def testCanObtainAWindowHandle(driver, pages):
pages.load("xhtmlTest.html")
currentHandle = driver.current_window_handle
assert currentHandle is not None
def testFailingToSwitchToAWindowLeavesTheCurrentWindowAsIs(driver, pages):
pages.load("xhtmlTest.html")
current = driver.current_window_handle
with pytest.raises(NoSuchWindowException):
driver.switch_to.window("I will never exist")
new_handle = driver.current_window_handle
assert current == new_handle
def testThatAccessingFindingAnElementAfterWindowIsClosedAndHaventswitchedDoesntCrash(driver, pages):
pages.load("xhtmlTest.html")
current = driver.current_window_handle
handles = driver.window_handles
driver.find_element_by_name("windowThree").click()
WebDriverWait(driver, 3).until(EC.new_window_is_opened(handles))
handles = driver.window_handles
handles.remove(current)
driver.switch_to.window(handles[0])
with pytest.raises(WebDriverException):
driver.find_element_by_id("close").click()
all_handles = driver.window_handles
assert 1 == len(all_handles)
driver.find_element_by_id("close")
driver.switch_to.window(current)
@pytest.mark.xfail_ie
@pytest.mark.xfail_chrome
def testShouldBeAbleToCreateANewWindow(driver, pages):
original_handle = driver.current_window_handle
driver.switch_to.new_window(WindowTypes.TAB)
new_handle = driver.current_window_handle
driver.close()
driver.switch_to.window(original_handle)
assert new_handle != original_handle