| Index: chrome/test/functional/fullscreen_mouselock.py
|
| ===================================================================
|
| --- chrome/test/functional/fullscreen_mouselock.py (revision 261231)
|
| +++ chrome/test/functional/fullscreen_mouselock.py (working copy)
|
| @@ -1,618 +0,0 @@
|
| -#!/usr/bin/env python
|
| -# Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -import logging
|
| -import os
|
| -import re
|
| -import shutil
|
| -import time
|
| -
|
| -import pyauto_functional # Must be imported before pyauto
|
| -import pyauto
|
| -import test_utils
|
| -from selenium.webdriver.common.action_chains import ActionChains
|
| -from selenium.common.exceptions import WebDriverException
|
| -from selenium.webdriver.common.keys import Keys
|
| -from webdriver_pages import settings
|
| -
|
| -
|
| -class FullscreenMouselockTest(pyauto.PyUITest):
|
| - """TestCase for Fullscreen and Mouse Lock."""
|
| -
|
| - def setUp(self):
|
| - pyauto.PyUITest.setUp(self)
|
| - self._driver = self.NewWebDriver()
|
| - # Get the hostname pattern (e.g. http://127.0.0.1:57622).
|
| - self._hostname_pattern = (
|
| - re.sub('/files/$', '', self.GetHttpURLForDataPath('')))
|
| -
|
| - def Debug(self):
|
| - """Test method for experimentation.
|
| -
|
| - This method will not run automatically.
|
| - """
|
| - page = settings.ContentSettingsPage.FromNavigation(self._driver)
|
| - import pdb
|
| - pdb.set_trace()
|
| -
|
| - def ExtraChromeFlags(self):
|
| - """Ensures Chrome is launched with custom flags.
|
| -
|
| - Returns:
|
| - A list of extra flags to pass to Chrome when it is launched.
|
| - """
|
| - # Extra flag needed by scroll performance tests.
|
| - return super(FullscreenMouselockTest,
|
| - self).ExtraChromeFlags() + ['--enable-pointer-lock']
|
| -
|
| - def testFullScreenMouseLockHooks(self):
|
| - """Verify fullscreen and mouse lock automation hooks work."""
|
| - self.NavigateToURL(self.GetHttpURLForDataPath(
|
| - 'fullscreen_mouselock', 'fullscreen_mouselock.html'))
|
| -
|
| - # Starting off we shouldn't be fullscreen
|
| - self.assertFalse(self.IsFullscreenForBrowser())
|
| - self.assertFalse(self.IsFullscreenForTab())
|
| -
|
| - # Go fullscreen
|
| - self._driver.find_element_by_id('enterFullscreen').click()
|
| - self.assertTrue(self.WaitUntil(self.IsFullscreenForTab))
|
| -
|
| - # Bubble should be up prompting to allow fullscreen
|
| - self.assertTrue(self.IsFullscreenBubbleDisplayed())
|
| - self.assertTrue(self.IsFullscreenBubbleDisplayingButtons())
|
| - self.assertTrue(self.IsFullscreenPermissionRequested())
|
| -
|
| - # Accept bubble, it should go away.
|
| - self.AcceptCurrentFullscreenOrMouseLockRequest()
|
| - self.assertTrue(self.WaitUntil(
|
| - lambda: not self.IsFullscreenBubbleDisplayingButtons()))
|
| -
|
| - # Try to lock mouse, it won't lock yet but permision will be requested.
|
| - self.assertFalse(self.IsMouseLocked())
|
| - self._driver.find_element_by_id('lockMouse1').click()
|
| - self.assertTrue(self.WaitUntil(self.IsMouseLockPermissionRequested))
|
| - self.assertFalse(self.IsMouseLocked())
|
| -
|
| - # Deny mouse lock.
|
| - self.DenyCurrentFullscreenOrMouseLockRequest()
|
| - self.assertTrue(self.WaitUntil(
|
| - lambda: not self.IsFullscreenBubbleDisplayingButtons()))
|
| - self.assertFalse(self.IsMouseLocked())
|
| -
|
| - # Try mouse lock again, and accept it.
|
| - self._driver.find_element_by_id('lockMouse1').click()
|
| - self.assertTrue(self.WaitUntil(self.IsMouseLockPermissionRequested))
|
| - self.AcceptCurrentFullscreenOrMouseLockRequest()
|
| - self.assertTrue(self.WaitUntil(self.IsMouseLocked))
|
| -
|
| - # The following doesn't work - as sending the key to the input field isn't
|
| - # picked up by the browser. :( Need an alternative way.
|
| - #
|
| - # # Ideally we wouldn't target a specific element, we'd just send keys to
|
| - # # whatever the current keyboard focus was.
|
| - # keys_target = driver.find_element_by_id('sendKeysTarget')
|
| - #
|
| - # # ESC key should exit fullscreen and mouse lock.
|
| - #
|
| - # print "# ESC key should exit fullscreen and mouse lock."
|
| - # keys_target.send_keys(Keys.ESCAPE)
|
| - # self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForBrowser()))
|
| - # self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForTab()))
|
| - # self.assertTrue(self.WaitUntil(lambda: not self.IsMouseLocked()))
|
| - #
|
| - # # Check we can go browser fullscreen
|
| - # print "# Check we can go browser fullscreen"
|
| - # keys_target.send_keys(Keys.F11)
|
| - # self.assertTrue(self.WaitUntil(self.IsFullscreenForBrowser))
|
| -
|
| - def _LaunchFSAndExpectPrompt(self, button_action='enterFullscreen'):
|
| - """Helper function to launch fullscreen and expect a prompt.
|
| -
|
| - Fullscreen is initiated and a bubble prompt appears asking to allow or
|
| - cancel from fullscreen mode. The actual fullscreen mode doesn't take place
|
| - until after approving the prompt.
|
| -
|
| - If the helper is not successful then the test will fail.
|
| -
|
| - Args:
|
| - button_action: The button id to click to initiate an action. Default is to
|
| - click enterFullscreen.
|
| - """
|
| - self.NavigateToURL(self.GetHttpURLForDataPath(
|
| - 'fullscreen_mouselock', 'fullscreen_mouselock.html'))
|
| - # Should not be in fullscreen mode during initial launch.
|
| - self.assertFalse(self.IsFullscreenForBrowser())
|
| - self.assertFalse(self.IsFullscreenForTab())
|
| - # Go into fullscreen mode.
|
| - self._driver.find_element_by_id(button_action).click()
|
| - self.assertTrue(self.WaitUntil(self.IsFullscreenForTab))
|
| - # Bubble should display prompting to allow fullscreen.
|
| - self.assertTrue(self.IsFullscreenPermissionRequested())
|
| -
|
| - def _InitiateBrowserFullscreen(self):
|
| - """Helper function that initiates browser fullscreen."""
|
| - self.NavigateToURL(self.GetHttpURLForDataPath(
|
| - 'fullscreen_mouselock', 'fullscreen_mouselock.html'))
|
| - # Should not be in fullscreen mode during initial launch.
|
| - self.assertFalse(self.IsFullscreenForBrowser())
|
| - self.assertFalse(self.IsFullscreenForTab())
|
| - # Initiate browser fullscreen.
|
| - self.ApplyAccelerator(pyauto.IDC_FULLSCREEN)
|
| - self.assertTrue(self.WaitUntil(self.IsFullscreenForBrowser))
|
| - self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForTab()))
|
| - self.assertTrue(self.WaitUntil(lambda: not self.IsMouseLocked()))
|
| -
|
| - def _InitiateTabFullscreen(self):
|
| - """Helper function that initiates tab fullscreen."""
|
| - self.NavigateToURL(self.GetHttpURLForDataPath(
|
| - 'fullscreen_mouselock', 'fullscreen_mouselock.html'))
|
| - # Initiate tab fullscreen.
|
| - self._driver.find_element_by_id('enterFullscreen').click()
|
| - self.assertTrue(self.WaitUntil(self.IsFullscreenForTab))
|
| -
|
| - def _AcceptFullscreenOrMouseLockRequest(self):
|
| - """Helper function to accept fullscreen or mouse lock request."""
|
| - self.AcceptCurrentFullscreenOrMouseLockRequest()
|
| - self.assertTrue(self.WaitUntil(
|
| - lambda: not self.IsFullscreenBubbleDisplayingButtons()))
|
| -
|
| - def _EnableFullscreenAndMouseLockMode(self):
|
| - """Helper function to enable fullscreen and mouse lock mode."""
|
| - self._LaunchFSAndExpectPrompt(button_action='enterFullscreenAndLockMouse1')
|
| - # Allow fullscreen.
|
| - self.AcceptCurrentFullscreenOrMouseLockRequest()
|
| - # The wait is needed due to crbug.com/123396. Should be able to click the
|
| - # fullscreen and mouselock button and be both accepted in a single action.
|
| - self.assertTrue(self.WaitUntil(self.IsMouseLockPermissionRequested))
|
| - # Allow mouse lock.
|
| - self.AcceptCurrentFullscreenOrMouseLockRequest()
|
| - self.assertTrue(self.WaitUntil(self.IsMouseLocked))
|
| -
|
| - def _EnableMouseLockMode(self, button_action='lockMouse1'):
|
| - """Helper function to enable mouse lock mode.
|
| -
|
| - Args:
|
| - button_action: The button id to click to initiate an action. Default is to
|
| - click lockMouse1.
|
| - """
|
| - self._driver.find_element_by_id(button_action).click()
|
| - self.assertTrue(self.WaitUntil(self.IsMouseLockPermissionRequested))
|
| - self.AcceptCurrentFullscreenOrMouseLockRequest()
|
| - self.assertTrue(self.IsMouseLocked())
|
| -
|
| - def _EnableAndReturnLockMouseResult(self):
|
| - """Helper function to enable and return mouse lock result."""
|
| - self.NavigateToURL(self.GetHttpURLForDataPath(
|
| - 'fullscreen_mouselock', 'fullscreen_mouselock.html'))
|
| - self._driver.find_element_by_id('lockMouse2').click()
|
| - self.assertTrue(
|
| - self.WaitUntil(self.IsMouseLockPermissionRequested))
|
| - self.AcceptCurrentFullscreenOrMouseLockRequest()
|
| - # Waits until lock_result gets 'success' or 'failure'.
|
| - return self._driver.execute_script('return lock_result')
|
| -
|
| - def _ClickAnchorLink(self):
|
| - """Clicks the anchor link until it's successfully clicked.
|
| -
|
| - Clicks on the anchor link and compares the js |clicked_elem_ID| variabled
|
| - with the anchor id. Returns True if the link is clicked.
|
| - """
|
| - element_id = 'anchor'
|
| - # Catch WebDriverException: u'Element is not clickable at point (185.5,
|
| - # 669.5). Instead another element would receive the click.
|
| - try:
|
| - self._driver.find_element_by_id(element_id).click()
|
| - except WebDriverException:
|
| - return False
|
| - return self._driver.execute_script('return clicked_elem_ID') == element_id
|
| -
|
| - def testPrefsForFullscreenAllowed(self):
|
| - """Verify prefs when fullscreen is allowed."""
|
| - self._LaunchFSAndExpectPrompt()
|
| - self._AcceptFullscreenOrMouseLockRequest()
|
| - content_settings = (
|
| - self.GetPrefsInfo().Prefs()['profile']['content_settings'])
|
| - self.assertEqual(
|
| - {self._hostname_pattern + ',*': {'fullscreen': 1}}, # Allow hostname.
|
| - content_settings['pattern_pairs'],
|
| - msg='Saved hostname pattern does not match expected pattern.')
|
| -
|
| - def testPrefsForFullscreenExit(self):
|
| - """Verify prefs is empty when exit fullscreen mode before allowing."""
|
| - self._LaunchFSAndExpectPrompt()
|
| - self._driver.find_element_by_id('exitFullscreen').click()
|
| - # Verify exit from fullscreen mode.
|
| - self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForTab()))
|
| - content_settings = (
|
| - self.GetPrefsInfo().Prefs()['profile']['content_settings'])
|
| - self.assertEqual(
|
| - {}, content_settings['pattern_pairs'],
|
| - msg='Patterns saved when there should be none.')
|
| -
|
| - def testPatternsForFSAndML(self):
|
| - """Verify hostname pattern and behavior for allowed mouse cursor lock.
|
| -
|
| - To lock the mouse, the browser needs to be in fullscreen mode.
|
| - """
|
| - self._EnableFullscreenAndMouseLockMode()
|
| - self._EnableMouseLockMode()
|
| - expected_pattern = (
|
| - {self._hostname_pattern + ',*': {'fullscreen': 1, 'mouselock': 1}})
|
| - content_settings = (
|
| - self.GetPrefsInfo().Prefs()['profile']['content_settings'])
|
| - self.assertEqual(
|
| - expected_pattern, content_settings['pattern_pairs'],
|
| - msg='Saved hostname and behavior patterns do not match expected.')
|
| -
|
| - def testPatternsForAllowMouseLock(self):
|
| - """Verify hostname pattern and behavior for allowed mouse cursor lock.
|
| -
|
| - Enable fullscreen mode and enable mouse lock separately.
|
| - """
|
| - self._LaunchFSAndExpectPrompt()
|
| - self.AcceptCurrentFullscreenOrMouseLockRequest()
|
| - self._EnableMouseLockMode()
|
| - expected_pattern = (
|
| - {self._hostname_pattern + ',*': {'fullscreen': 1, 'mouselock': 1}})
|
| - content_settings = (
|
| - self.GetPrefsInfo().Prefs()['profile']['content_settings'])
|
| - self.assertEqual(
|
| - expected_pattern, content_settings['pattern_pairs'],
|
| - msg='Saved hostname and behavior patterns do not match expected.')
|
| -
|
| - def testNoMouseLockRequest(self):
|
| - """Verify mouse lock request does not appear.
|
| -
|
| - When allowing all sites to disable the mouse cursor, the mouse lock request
|
| - bubble should not show. The mouse cursor should be automatically disabled
|
| - when clicking on a disable mouse button.
|
| - """
|
| - # Allow all sites to disable mouse cursor.
|
| - self.SetPrefs(pyauto.kDefaultContentSettings, {u'mouselock': 1})
|
| - self._LaunchFSAndExpectPrompt()
|
| - # Allow for fullscreen mode.
|
| - self._AcceptFullscreenOrMouseLockRequest()
|
| - self._driver.set_script_timeout(2)
|
| - # Receive callback status (success or failure) from javascript that the
|
| - # click has registered and the mouse lock status has changed.
|
| - lock_result = self._driver.execute_async_script(
|
| - 'lockMouse1(arguments[arguments.length - 1])')
|
| - self.assertEqual(lock_result, 'success', msg='Mouse lock unsuccessful.')
|
| - self.assertTrue(self.WaitUntil(
|
| - lambda: not self.IsMouseLockPermissionRequested()))
|
| - self.assertTrue(self.IsMouseLocked())
|
| -
|
| - def testUnableToLockMouse(self):
|
| - """Verify mouse lock is disabled.
|
| -
|
| - When not allowing any site to disable the mouse cursor, the mouse lock
|
| - request bubble should not show and the mouse cursor should not be disabled.
|
| - """
|
| - # Do not allow any site to disable mouse cursor.
|
| - self.SetPrefs(pyauto.kDefaultContentSettings, {u'mouselock': 2})
|
| - self._LaunchFSAndExpectPrompt()
|
| - # Allow for fullscreen mode.
|
| - self._AcceptFullscreenOrMouseLockRequest()
|
| - self._driver.set_script_timeout(2)
|
| - # Receive callback status (success or failure) from javascript that the
|
| - # click has registered and the mouse lock status has changed.
|
| - lock_result = self._driver.execute_async_script(
|
| - 'lockMouse1(arguments[arguments.length - 1])')
|
| - self.assertEqual(lock_result, 'failure', msg='Mouse locked unexpectedly.')
|
| - self.assertTrue(self.WaitUntil(
|
| - lambda: not self.IsMouseLockPermissionRequested()))
|
| - self.assertTrue(self.WaitUntil(lambda: not self.IsMouseLocked()))
|
| -
|
| - def testEnterTabFSWhileInBrowserFS(self):
|
| - """Verify able to enter into tab fullscreen while in browser fullscreen."""
|
| - self._InitiateBrowserFullscreen()
|
| - # Initiate tab fullscreen.
|
| - self._driver.find_element_by_id('enterFullscreen').click()
|
| - self.assertTrue(self.WaitUntil(lambda: self.IsFullscreenForTab()))
|
| - self.assertTrue(self.WaitUntil(lambda: not self.IsMouseLocked()))
|
| -
|
| - def testMouseLockInBrowserFS(self):
|
| - """Verify mouse lock in browser fullscreen requires allow prompt."""
|
| - self._InitiateBrowserFullscreen()
|
| - self._driver.set_script_timeout(2)
|
| - self._driver.execute_script('lockMouse1AndSetLockResult()')
|
| - # Bubble should display prompting to allow mouselock.
|
| - self.assertTrue(self.WaitUntil(self.IsMouseLockPermissionRequested))
|
| - self.AcceptCurrentFullscreenOrMouseLockRequest()
|
| - # Waits until lock_result gets 'success' or 'failure'.
|
| - lock_result = self._driver.execute_script('return lock_result')
|
| - self.assertEqual(lock_result, 'success',
|
| - msg='Mouse was not locked in browser fullscreen.')
|
| -
|
| - def testNoMouseLockWhenCancelFS(self):
|
| - """Verify mouse lock breaks when canceling tab fullscreen.
|
| -
|
| - This test uses javascript to initiate exit of tab fullscreen after mouse
|
| - lock success callback.
|
| - """
|
| - self._LaunchFSAndExpectPrompt()
|
| - self._driver.set_script_timeout(2)
|
| - lock_result = self._driver.execute_script('lockMouse1AndSetLockResult()')
|
| - self.assertTrue(
|
| - self.WaitUntil(lambda: self.IsMouseLockPermissionRequested()))
|
| - self.AcceptCurrentFullscreenOrMouseLockRequest()
|
| - self.assertTrue(self.WaitUntil(self.IsMouseLocked))
|
| - # Waits until lock_result gets 'success' or 'failure'.
|
| - lock_result = self._driver.execute_script('return lock_result')
|
| - self.assertEqual(
|
| - lock_result, 'success', msg='Mouse is not locked.')
|
| - self._driver.execute_script('document.webkitCancelFullScreen()')
|
| - self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForTab()),
|
| - msg='Tab is still in fullscreen.')
|
| - self.assertTrue(self.WaitUntil(lambda: not self.IsMouseLocked()),
|
| - msg='Mouse is still locked after exiting fullscreen.')
|
| -
|
| - def testNoTabFSExitWhenJSExitMouseLock(self):
|
| - """Verify tab fullscreen does not exit when javascript init mouse lock exit.
|
| -
|
| - This test uses javascript to initiate exit of mouse lock after mouse
|
| - lock success callback.
|
| - """
|
| - self._LaunchFSAndExpectPrompt()
|
| - self._EnableMouseLockMode()
|
| - self._driver.execute_script('navigator.webkitPointer.unlock()')
|
| - self.WaitUntil(lambda: not self.IsMouseLocked())
|
| - self.assertTrue(self.IsFullscreenForTab(), msg='Tab fullscreen was lost.')
|
| -
|
| - def testMouseLockExitWhenAlertDialogShow(self):
|
| - """Verify mouse lock breaks when alert dialog appears."""
|
| - self._LaunchFSAndExpectPrompt()
|
| - self._EnableMouseLockMode()
|
| - # Need to catch the exception here since the alert dialog raises
|
| - # a WebDriverException due to a modal dialog.
|
| - from selenium.common.exceptions import WebDriverException
|
| - try:
|
| - self._driver.execute_script('alert("A modal dialog")')
|
| - except WebDriverException:
|
| - pass
|
| -
|
| - self.assertTrue(self.WaitUntil(lambda: self.IsFullscreenForTab()),
|
| - msg='Tab fullscreen was lost.')
|
| - self.assertTrue(self.WaitUntil(lambda: not self.IsMouseLocked()),
|
| - msg='Mouse is still locked')
|
| -
|
| - def testMouseLockExitWhenBrowserLoseFocus(self):
|
| - """Verify mouse lock breaks when browser loses focus.
|
| -
|
| - Mouse lock breaks when the focus is placed on another new window.
|
| - """
|
| - self._LaunchFSAndExpectPrompt()
|
| - self.AcceptCurrentFullscreenOrMouseLockRequest()
|
| - # Open a new window to shift focus away.
|
| - self.OpenNewBrowserWindow(True)
|
| - self.assertTrue(self.WaitUntil(lambda: self.IsFullscreenForTab()))
|
| - self.assertTrue(self.WaitUntil(lambda: not self.IsMouseLocked()),
|
| - msg='Mouse lock did not break when browser lost focus.')
|
| -
|
| - def testMouseLockLostOnReload(self):
|
| - """Verify mouse lock is lost on page reload."""
|
| - self.NavigateToURL(self.GetHttpURLForDataPath(
|
| - 'fullscreen_mouselock', 'fullscreen_mouselock.html'))
|
| - self._EnableMouseLockMode()
|
| - self.ReloadActiveTab()
|
| - self.assertTrue(self.WaitUntil(lambda: not self.IsMouseLocked()),
|
| - msg='Mouse lock did not break when page is reloaded.')
|
| -
|
| - def testNoMLBubbleWhenTabLoseFocus(self):
|
| - """Verify mouse lock bubble goes away when tab loses focus."""
|
| - self.NavigateToURL(self.GetHttpURLForDataPath(
|
| - 'fullscreen_mouselock', 'fullscreen_mouselock.html'))
|
| - self._driver.find_element_by_id('lockMouse1').click()
|
| - self.assertTrue(self.WaitUntil(self.IsMouseLockPermissionRequested))
|
| - self.AppendTab(pyauto.GURL('chrome://newtab'))
|
| - self.assertTrue(self.WaitUntil(
|
| - lambda: not self.IsFullscreenBubbleDisplayingButtons()),
|
| - msg='Mouse lock bubble did not clear when tab lost focus.')
|
| -
|
| - def testTabFSExitWhenNavBackToPrevPage(self):
|
| - """Verify tab fullscreen exit when navigating back to previous page.
|
| -
|
| - This test navigates to a new page while in tab fullscreen mode by using
|
| - GoBack() to navigate to the previous google.html page.
|
| - """
|
| - self.NavigateToURL(self.GetHttpURLForDataPath('google', 'google.html'))
|
| - self._InitiateTabFullscreen()
|
| - self.TabGoBack()
|
| - self.assertFalse(
|
| - self.IsFullscreenForTab(),
|
| - msg='Tab fullscreen did not exit when navigating to a new page.')
|
| -
|
| - def testTabFSExitWhenNavToNewPage(self):
|
| - """Verify tab fullscreen exit when navigating to a new website.
|
| -
|
| - This test navigates to a new website while in tab fullscreen.
|
| - """
|
| - self._InitiateTabFullscreen()
|
| - self.NavigateToURL(self.GetHttpURLForDataPath('google', 'google.html'))
|
| - self.assertFalse(
|
| - self.IsFullscreenForTab(),
|
| - msg='Tab fullscreen did not exit when navigating to a new website.')
|
| -
|
| - def testTabFSDoesNotExitForAnchorLinks(self):
|
| - """Verify tab fullscreen does not exit for anchor links.
|
| -
|
| - Tab fullscreen should not exit when following a link to the same page such
|
| - as example.html#anchor.
|
| - """
|
| - self._InitiateTabFullscreen()
|
| - self.assertTrue(self.WaitUntil(self._ClickAnchorLink))
|
| - self.assertTrue(
|
| - self.WaitUntil(self.IsFullscreenForTab),
|
| - msg='Tab fullscreen should not exit when clicking on an anchor link.')
|
| -
|
| - def testMLExitWhenNavBackToPrevPage(self):
|
| - """Verify mouse lock exit when navigating back to previous page.
|
| -
|
| - This test navigates to a new page while mouse lock is activated by using
|
| - GoBack() to navigate to the previous google.html page.
|
| - """
|
| - self.NavigateToURL(self.GetHttpURLForDataPath('google', 'google.html'))
|
| - lock_result = self._EnableAndReturnLockMouseResult()
|
| - self.assertEqual(
|
| - lock_result, 'success', msg='Mouse is not locked.')
|
| - self.TabGoBack()
|
| - self.assertFalse(
|
| - self.IsMouseLocked(),
|
| - msg='Mouse lock did not exit when navigating to the prev page.')
|
| -
|
| - def testMLExitWhenNavToNewPage(self):
|
| - """Verify mouse lock exit when navigating to a new website."""
|
| - lock_result = self._EnableAndReturnLockMouseResult()
|
| - self.assertEqual(
|
| - lock_result, 'success', msg='Mouse is not locked.')
|
| - self.NavigateToURL(self.GetHttpURLForDataPath('google', 'google.html'))
|
| - self.assertFalse(
|
| - self.IsMouseLocked(),
|
| - msg='Mouse lock did not exit when navigating to a new website.')
|
| -
|
| - def testMLDoesNotExitForAnchorLinks(self):
|
| - """Verify mouse lock does not exit for anchor links.
|
| -
|
| - Mouse lock should not exist when following a link to the same page such as
|
| - example.html#anchor.
|
| - """
|
| - lock_result = self._EnableAndReturnLockMouseResult()
|
| - self.assertEqual(
|
| - lock_result, 'success', msg='Mouse is not locked.')
|
| - ActionChains(self._driver).move_to_element(
|
| - self._driver.find_element_by_id('anchor')).click().perform()
|
| - self.assertTrue(self.WaitUntil(self.IsMouseLocked),
|
| - msg='Mouse lock broke when clicking on an anchor link.')
|
| -
|
| - def ExitTabFSToBrowserFS(self):
|
| - """Verify exiting tab fullscreen leaves browser in browser fullscreen.
|
| -
|
| - This test is semi-automated.
|
| -
|
| - The browser initiates browser fullscreen, then initiates tab fullscreen. The
|
| - test verifies that existing tab fullscreen by simulating ESC key press or
|
| - clicking the js function to exitFullscreen() will exit the tab fullscreen
|
| - leaving browser fullscreen intact.
|
| - """
|
| - self._InitiateBrowserFullscreen()
|
| - # Initiate tab fullscreen.
|
| - self._driver.find_element_by_id('enterFullscreen').click()
|
| - self.assertTrue(self.WaitUntil(lambda: self.IsFullscreenForTab()))
|
| - # Require manual intervention to send ESC key due to crbug.com/123930.
|
| - # TODO(dyu): Update to a full test once associated bug is fixed.
|
| - logging.info('Press ESC key to exit tab fullscreen.')
|
| - time.sleep(5)
|
| - self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForTab()))
|
| - self.assertTrue(self.WaitUntil(lambda: self.IsFullscreenForBrowser()),
|
| - msg='Not in browser fullscreen mode.')
|
| -
|
| - self._driver.find_element_by_id('enterFullscreen').click()
|
| - self.assertTrue(self.WaitUntil(lambda: self.IsFullscreenForTab()))
|
| - # Exit tab fullscreen by clicking button exitFullscreen().
|
| - self._driver.find_element_by_id('exitFullscreen').click()
|
| - self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForTab()))
|
| - self.assertTrue(self.WaitUntil(lambda: self.IsFullscreenForBrowser()),
|
| - msg='Not in browser fullscreen mode.')
|
| -
|
| - def F11KeyExitsTabAndBrowserFS(self):
|
| - """Verify existing tab fullscreen exits all fullscreen modes.
|
| -
|
| - This test is semi-automated.
|
| -
|
| - The browser initiates browser fullscreen, then initiates tab fullscreen. The
|
| - test verifies that existing tab fullscreen by simulating F11 key press or
|
| - CMD + SHIFT + F keys on the Mac will exit the tab fullscreen and the
|
| - browser fullscreen.
|
| - """
|
| - self._InitiateBrowserFullscreen()
|
| - # Initiate tab fullscreen.
|
| - self._driver.find_element_by_id('enterFullscreen').click()
|
| - self.assertTrue(self.WaitUntil(lambda: self.IsFullscreenForTab()))
|
| - # Require manual intervention to send F11 key due to crbug.com/123930.
|
| - # TODO(dyu): Update to a full test once associated bug is fixed.
|
| - logging.info('Press F11 key to exit tab fullscreen.')
|
| - time.sleep(5)
|
| - self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForTab()))
|
| - self.assertTrue(self.WaitUntil(lambda: not self.IsFullscreenForBrowser()),
|
| - msg='Browser is in fullscreen mode.')
|
| -
|
| - def SearchForTextOutsideOfContainer(self):
|
| - """Verify text outside of container is not visible when fullscreen.
|
| -
|
| - This test is semi-automated.
|
| -
|
| - Verify this test manually until there is a way to find text on screen
|
| - without using FindInPage().
|
| -
|
| - The text that is outside of the fullscreen container should only be visible
|
| - when fullscreen is off. The text should not be visible while in fullscreen
|
| - mode.
|
| - """
|
| - self.NavigateToURL(self.GetHttpURLForDataPath(
|
| - 'fullscreen_mouselock', 'fullscreen_mouselock.html'))
|
| - # Should not be in fullscreen mode during initial launch.
|
| - self.assertFalse(self.IsFullscreenForBrowser())
|
| - self.assertFalse(self.IsFullscreenForTab())
|
| - self.assertTrue(
|
| - self.WaitUntil(lambda: self.FindInPage(
|
| - 'This text is outside of the container')['match_count'],
|
| - expect_retval=1))
|
| - # Go into fullscreen mode.
|
| - self._driver.find_element_by_id('enterFullscreen').click()
|
| - self.assertTrue(self.WaitUntil(self.IsFullscreenForTab))
|
| - time.sleep(5)
|
| - # TODO(dyu): find a way to verify on screen text instead of using
|
| - # FindInPage() which searches for text in the HTML.
|
| -
|
| - def SameMouseLockMovement(self):
|
| - """Verify the correct feel of mouse movement data when mouse is locked.
|
| -
|
| - This test is semi-automated.
|
| -
|
| - This test loads the same web page in two different tabs while in mouse lock
|
| - mode. Each tab loads the web page from a different URL (e.g. by loading it
|
| - from a localhost server and a file url). The test verifies
|
| - that the mouse lock movements work the same in both
|
| - tabs.
|
| - """
|
| - url1 = self.GetHttpURLForDataPath(
|
| - 'fullscreen_mouselock', 'fullscreen_mouselock.html')
|
| - url2 = self.GetFileURLForDataPath(
|
| - 'fullscreen_mouselock', 'fullscreen_mouselock.html')
|
| - tab2 = 'f1-4'
|
| - self.NavigateToURL(url1)
|
| - self.RunCommand(pyauto.IDC_NEW_TAB) # Open new tab.
|
| - self.NavigateToURL(url2, 0, 1)
|
| - self._driver.switch_to_window(tab2)
|
| - self._EnableMouseLockMode() # Lock mouse in tab 2.
|
| - raw_input('Manually move the mouse cursor on the page in tab 2. Shift+Tab \
|
| - into tab 1, click on lockMouse1() button, and move the mouse \
|
| - cursor on the page in tab 1. Verify mouse movement is smooth.')
|
| -
|
| - def MouseEventsIndependentOfExitBubble(self):
|
| - """Verify mouse events are independent of the exit FS exit bubble for ML.
|
| -
|
| - Mouse movement events should work immediately when mouse lock is activated.
|
| - The events should not be blocked waiting for the exit instruction bubble to
|
| - clear.
|
| - """
|
| - self.NavigateToURL(self.GetHttpURLForDataPath(
|
| - 'fullscreen_mouselock', 'fullscreen_mouselock.html'))
|
| - # Should not be in fullscreen mode during initial launch.
|
| - self.assertFalse(self.IsFullscreenForBrowser())
|
| - self.assertFalse(self.IsFullscreenForTab())
|
| - # Go into fullscreen mode.
|
| - self._driver.find_element_by_id('enterFullscreen').click()
|
| - self.assertTrue(self.WaitUntil(self.IsFullscreenForTab))
|
| - self._EnableMouseLockMode()
|
| - raw_input(
|
| - '1. Move the mouse, see movement data being received by the page.\
|
| - 2. Press ESC key.\
|
| - 3. Lock the mouse without going fullscreen. Click lockMouse1() button.\
|
| - Verify: The mouse movement events should work immediately.')
|
| -
|
| -if __name__ == '__main__':
|
| - pyauto_functional.Main()
|
|
|