tenfourfox/testing/firefox-ui/tests/firefox_ui_tests/puppeteer/test_windows.py

235 lines
8.4 KiB
Python
Raw Normal View History

2017-04-19 07:56:45 +00:00
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
from marionette_driver import By, Wait
from marionette_driver.errors import NoSuchWindowException, TimeoutException
import firefox_puppeteer.errors as errors
from firefox_puppeteer.testcases import FirefoxTestCase
from firefox_puppeteer.ui.windows import BaseWindow
class TestWindows(FirefoxTestCase):
def tearDown(self):
try:
self.windows.close_all([self.browser])
finally:
FirefoxTestCase.tearDown(self)
def test_switch_to(self):
url = self.marionette.absolute_url('layout/mozilla.html')
# Open two more windows
for index in range(0, 2):
self.marionette.execute_script(""" window.open(); """)
windows = self.windows.all
self.assertEquals(len(windows), 3)
# Switch to the 2nd window
self.windows.switch_to(windows[1].handle)
self.assertEquals(windows[1].handle, self.marionette.current_chrome_window_handle)
# TODO: Needs updated tabs module for improved navigation
with self.marionette.using_context('content'):
self.marionette.navigate(url)
# Switch to the last window and find 2nd window by URL
self.windows.switch_to(windows[2].handle)
# TODO: A window can have multiple tabs, so this may need an update
# when the tabs module gets implemented
def find_by_url(win):
with win.marionette.using_context('content'):
return win.marionette.get_url() == url
self.windows.switch_to(find_by_url)
self.assertEquals(windows[1].handle, self.marionette.current_chrome_window_handle)
self.windows.switch_to(find_by_url)
# Switching to an unknown handles has to fail
self.assertRaises(NoSuchWindowException,
self.windows.switch_to, "humbug")
self.assertRaises(NoSuchWindowException,
self.windows.switch_to, lambda win: False)
self.windows.close_all([self.browser])
self.browser.switch_to()
self.assertEqual(len(self.windows.all), 1)
def test_switch_to_unknown_window_type(self):
def open_by_js(_):
with self.marionette.using_context('chrome'):
self.marionette.execute_script("""
window.open('chrome://browser/content/safeMode.xul', '_blank',
'chrome,centerscreen,resizable=no');
""")
win = self.browser.open_window(callback=open_by_js, expected_window_class=BaseWindow)
win.close()
self.browser.switch_to()
class TestBaseWindow(FirefoxTestCase):
def tearDown(self):
try:
self.windows.close_all([self.browser])
finally:
FirefoxTestCase.tearDown(self)
def test_basics(self):
# force BaseWindow instance
win1 = BaseWindow(lambda: self.marionette, self.browser.handle)
self.assertEquals(win1.handle, self.marionette.current_chrome_window_handle)
self.assertEquals(win1.window_element,
self.marionette.find_element(By.CSS_SELECTOR, ':root'))
self.assertEquals(win1.window_element.get_attribute('windowtype'),
self.marionette.get_window_type())
self.assertFalse(win1.closed)
# Test invalid parameters for BaseWindow constructor
self.assertRaises(TypeError,
BaseWindow, self.marionette, self.browser.handle)
self.assertRaises(errors.UnknownWindowError,
BaseWindow, lambda: self.marionette, 10)
# Test invalid shortcuts
self.assertRaises(KeyError,
win1.send_shortcut, 'l', acel=True)
def test_open_close(self):
# force BaseWindow instance
win1 = BaseWindow(lambda: self.marionette, self.browser.handle)
# Open a new window (will be focused), and check states
win2 = win1.open_window()
# force BaseWindow instance
win2 = BaseWindow(lambda: self.marionette, win2.handle)
self.assertEquals(len(self.marionette.chrome_window_handles), 2)
self.assertNotEquals(win1.handle, win2.handle)
self.assertEquals(win2.handle, self.marionette.current_chrome_window_handle)
win2.close()
self.assertTrue(win2.closed)
self.assertEquals(len(self.marionette.chrome_window_handles), 1)
self.assertEquals(win2.handle, self.marionette.current_chrome_window_handle)
Wait(self.marionette).until(lambda _: win1.focused) # catch the no focused window
win1.focus()
# Open and close a new window by a custom callback
def opener(window):
window.marionette.execute_script(""" window.open(); """)
def closer(window):
window.marionette.execute_script(""" window.close(); """)
win2 = win1.open_window(callback=opener)
# force BaseWindow instance
win2 = BaseWindow(lambda: self.marionette, win2.handle)
self.assertEquals(len(self.marionette.chrome_window_handles), 2)
win2.close(callback=closer)
win1.focus()
# Check for an unexpected window class
self.assertRaises(errors.UnexpectedWindowTypeError,
win1.open_window, expected_window_class=BaseWindow)
self.windows.close_all([win1])
def test_switch_to_and_focus(self):
# force BaseWindow instance
win1 = BaseWindow(lambda: self.marionette, self.browser.handle)
# Open a new window (will be focused), and check states
win2 = win1.open_window()
# force BaseWindow instance
win2 = BaseWindow(lambda: self.marionette, win2.handle)
self.assertEquals(win2.handle, self.marionette.current_chrome_window_handle)
self.assertEquals(win2.handle, self.windows.focused_chrome_window_handle)
self.assertFalse(win1.focused)
self.assertTrue(win2.focused)
# Switch back to win1 without moving the focus, but focus separately
win1.switch_to()
self.assertEquals(win1.handle, self.marionette.current_chrome_window_handle)
self.assertTrue(win2.focused)
win1.focus()
self.assertTrue(win1.focused)
# Switch back to win2 by focusing it directly
win2.focus()
self.assertEquals(win2.handle, self.marionette.current_chrome_window_handle)
self.assertEquals(win2.handle, self.windows.focused_chrome_window_handle)
self.assertTrue(win2.focused)
# Close win2, and check that it keeps active but looses focus
win2.switch_to()
win2.close()
win1.switch_to()
class TestBrowserWindow(FirefoxTestCase):
def tearDown(self):
try:
self.windows.close_all([self.browser])
finally:
FirefoxTestCase.tearDown(self)
def test_basic(self):
self.assertNotEqual(self.browser.dtds, [])
self.assertNotEqual(self.browser.properties, [])
self.assertFalse(self.browser.is_private)
self.assertIsNotNone(self.browser.menubar)
self.assertIsNotNone(self.browser.navbar)
self.assertIsNotNone(self.browser.tabbar)
def test_open_close(self):
# open and close a new browser windows by menu
win2 = self.browser.open_browser(trigger='menu')
self.assertEquals(win2, self.windows.current)
self.assertFalse(self.browser.is_private)
win2.close(trigger='menu')
# open and close a new browser window by shortcut
win2 = self.browser.open_browser(trigger='shortcut')
self.assertEquals(win2, self.windows.current)
self.assertFalse(self.browser.is_private)
win2.close(trigger='shortcut')
# open and close a new private browsing window
win2 = self.browser.open_browser(is_private=True)
self.assertEquals(win2, self.windows.current)
self.assertTrue(win2.is_private)
win2.close()
# open and close a new private browsing window
win2 = self.browser.open_browser(trigger='shortcut', is_private=True)
self.assertEquals(win2, self.windows.current)
self.assertTrue(win2.is_private)
win2.close()
# force closing a window
win2 = self.browser.open_browser()
self.assertEquals(win2, self.windows.current)
win2.close(force=True)