| #!/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 time |
| |
| import pyauto_functional # Must be imported before pyauto |
| import pyauto |
| import test_utils |
| |
| from webdriver_pages import settings |
| from webdriver_pages.settings import Behaviors, ContentTypes |
| from webdriver_pages.settings import RestoreOnStartupType |
| |
| |
| class PrefsUITest(pyauto.PyUITest): |
| """TestCase for Preferences UI.""" |
| |
| INFOBAR_TYPE = 'rph_infobar' |
| |
| def setUp(self): |
| pyauto.PyUITest.setUp(self) |
| self._driver = self.NewWebDriver() |
| |
| def Debug(self): |
| """Test method for experimentation. |
| |
| This method will not run automatically. |
| """ |
| driver = self.NewWebDriver() |
| page = settings.ContentSettingsPage.FromNavigation(driver) |
| import pdb |
| pdb.set_trace() |
| |
| def _GetGeolocationContentSettingsBehavior(self): |
| """Get the Content Settings behavior for Geolocation. |
| |
| Returns: |
| The exceptions behavior for the specified content type. |
| The content type is the available content setting available. |
| """ |
| behavior_key = self.GetPrefsInfo().Prefs( |
| pyauto.kGeolocationDefaultContentSetting) |
| behaviors_dict = {1: 'ALLOW', 2: 'BLOCK', 3: 'ASK'} |
| self.assertTrue( |
| behavior_key in behaviors_dict, |
| msg=('Invalid default behavior key "%s" for "geolocation" content' % |
| behavior_key)) |
| return behaviors_dict[behavior_key] |
| |
| def _VerifyContentExceptionUI(self, content_type, hostname_pattern, behavior, |
| incognito=False): |
| """Find hostname pattern and behavior within UI on content exceptions page. |
| |
| Args: |
| content_type: The string content settings type to manage. |
| hostname_pattern: The URL or pattern associated with the behavior. |
| behavior: The exception to allow or block the hostname. |
| incognito: Incognito list displayed on exceptions settings page. |
| Default to False. |
| """ |
| page = settings.ManageExceptionsPage.FromNavigation( |
| self._driver, content_type) |
| self.assertTrue(page.GetExceptions(incognito).has_key(hostname_pattern), |
| msg=('No displayed host name matches pattern "%s"' |
| % hostname_pattern)) |
| self.assertEqual(behavior, page.GetExceptions(incognito)[hostname_pattern], |
| msg=('Displayed behavior "%s" does not match behavior "%s"' |
| % (page.GetExceptions(incognito)[hostname_pattern], |
| behavior))) |
| |
| def testLocationSettingOptionsUI(self): |
| """Verify the location options setting UI. |
| |
| Set the options through the UI using webdriver and verify the settings in |
| pyAuto. |
| """ |
| page = settings.ContentSettingsPage.FromNavigation(self._driver) |
| page.SetContentTypeOption(ContentTypes.GEOLOCATION, Behaviors.ALLOW) |
| self.assertEqual( |
| 1, self.GetPrefsInfo().Prefs(pyauto.kGeolocationDefaultContentSetting)) |
| page.SetContentTypeOption(ContentTypes.GEOLOCATION, Behaviors.BLOCK) |
| self.assertEqual( |
| 2, self.GetPrefsInfo().Prefs(pyauto.kGeolocationDefaultContentSetting)) |
| page.SetContentTypeOption(ContentTypes.GEOLOCATION, Behaviors.ASK) |
| self.assertEqual( |
| 3, self.GetPrefsInfo().Prefs(pyauto.kGeolocationDefaultContentSetting)) |
| |
| def testBehaviorValueCorrectlyDisplayed(self): |
| """Verify the set behavior value is correctly displayed.""" |
| # Block all sites. |
| self.SetPrefs(pyauto.kGeolocationDefaultContentSetting, 2) |
| self.assertEqual( |
| self._GetGeolocationContentSettingsBehavior(), Behaviors.BLOCK.upper(), |
| msg='The behavior was incorrectly set.') |
| # Allow all sites. |
| self.SetPrefs(pyauto.kGeolocationDefaultContentSetting, 1) |
| self.assertEqual( |
| self._GetGeolocationContentSettingsBehavior(), Behaviors.ALLOW.upper(), |
| msg='The behavior was incorrectly set.') |
| # Ask for permission when site wants to track. |
| self.SetPrefs(pyauto.kGeolocationDefaultContentSetting, 3) |
| self.assertEqual( |
| self._GetGeolocationContentSettingsBehavior(), Behaviors.ASK.upper(), |
| msg='The behavior was incorrectly set.') |
| |
| def testExceptionsEntryCorrectlyDisplayed(self): |
| """Verify the exceptions line entry is correctly displayed in the UI.""" |
| geo_exception = ( |
| {'http://maps.google.com:80,http://maps.google.com:80': |
| {'geolocation': 2}}) |
| self.SetPrefs(pyauto.kContentSettingsPatternPairs, geo_exception) |
| self._VerifyContentExceptionUI( |
| ContentTypes.GEOLOCATION, 'http://maps.google.com:80', |
| Behaviors.BLOCK) |
| geo_exception = ( |
| {'http://maps.google.com:80,http://maps.google.com:80': |
| {'geolocation': 1}}) |
| self.SetPrefs(pyauto.kContentSettingsPatternPairs, geo_exception) |
| self._VerifyContentExceptionUI( |
| ContentTypes.GEOLOCATION, 'http://maps.google.com:80', |
| Behaviors.ALLOW) |
| geo_exception = ( |
| {'http://maps.google.com:80,http://maps.google.com:80': |
| {'geolocation': 3}}) |
| self.SetPrefs(pyauto.kContentSettingsPatternPairs, geo_exception) |
| self._VerifyContentExceptionUI( |
| ContentTypes.GEOLOCATION, 'http://maps.google.com:80', Behaviors.ASK) |
| |
| def testAddNewExceptionUI(self): |
| """Verify new exception added for hostname pattern and behavior in UI.""" |
| content_type = ContentTypes.PLUGINS |
| page = settings.ManageExceptionsPage.FromNavigation( |
| self._driver, content_type) |
| |
| pattern, behavior = ('bing.com', Behaviors.BLOCK) |
| page.AddNewException(pattern, behavior) |
| self.assertEqual(page.GetExceptions()[pattern], Behaviors.BLOCK, |
| msg='The behavior "%s" was not added for pattern "%s"' |
| % (behavior, pattern)) |
| |
| def testChangeExceptionBehaviorUI(self): |
| """Verify behavior for hostname pattern is changed in the UI.""" |
| content_type = ContentTypes.PLUGINS |
| page = settings.ManageExceptionsPage.FromNavigation( |
| self._driver, content_type) |
| |
| pattern, behavior = ('bing.com', Behaviors.BLOCK) |
| page.AddNewException(pattern, behavior) |
| new_behavior = Behaviors.ALLOW |
| page.SetBehaviorForPattern(pattern, new_behavior) |
| self.assertEqual(page.GetExceptions()[pattern], Behaviors.ALLOW, |
| msg='The behavior for "%s" did not change: "%s"' |
| % (pattern, behavior)) |
| |
| def testDeleteExceptionUI(self): |
| """Verify exception deleted for hostname pattern and behavior in the UI.""" |
| content_type = ContentTypes.PLUGINS |
| page = settings.ManageExceptionsPage.FromNavigation( |
| self._driver, content_type) |
| |
| pattern, behavior = ('bing.com', Behaviors.BLOCK) |
| page.AddNewException(pattern, behavior) |
| self.assertEqual(page.GetExceptions()[pattern], Behaviors.BLOCK, |
| msg='The behavior "%s" was not added for pattern "%s"' |
| % (behavior, pattern)) |
| page.DeleteException(pattern) |
| self.assertEqual(page.GetExceptions().get(pattern, KeyError), KeyError, |
| msg='Pattern "%s" was not deleted' % pattern) |
| |
| def testNoInitialLineEntryInUI(self): |
| """Verify no initial line entry is displayed in UI.""" |
| # Ask for permission when site wants to track. |
| self.SetPrefs(pyauto.kGeolocationDefaultContentSetting, 3) |
| self.assertEqual( |
| 3, self.GetPrefsInfo().Prefs(pyauto.kGeolocationDefaultContentSetting)) |
| page = settings.ManageExceptionsPage.FromNavigation( |
| self._driver, ContentTypes.GEOLOCATION) |
| self.assertEqual(0, len(page.GetExceptions())) |
| |
| def testCorrectCookiesSessionInUI(self): |
| """Verify exceptions for cookies in UI list entry.""" |
| # Block cookies for for a session for google.com. |
| self.SetPrefs(pyauto.kContentSettingsPatternPairs, |
| {'http://google.com:80': {'cookies': 2}}) |
| self._VerifyContentExceptionUI( |
| ContentTypes.COOKIES, 'http://google.com:80', Behaviors.BLOCK) |
| |
| def testInitialLineEntryInIncognitoUI(self): |
| """Verify initial line entry is displayed in Incognito UI.""" |
| self.RunCommand(pyauto.IDC_NEW_INCOGNITO_WINDOW) # Display incognito list. |
| page = settings.ManageExceptionsPage.FromNavigation( |
| self._driver, ContentTypes.PLUGINS) |
| self.assertEqual(1, len(page.GetExceptions(incognito=True))) |
| |
| def testIncognitoExceptionsEntryCorrectlyDisplayed(self): |
| """Verify exceptions entry is correctly displayed in the incognito UI.""" |
| self.RunCommand(pyauto.IDC_NEW_INCOGNITO_WINDOW) # Display incognito list. |
| page = settings.ManageExceptionsPage.FromNavigation( |
| self._driver, ContentTypes.PLUGINS) |
| pattern, behavior = ('http://maps.google.com:80', Behaviors.BLOCK) |
| page.AddNewException(pattern, behavior, incognito=True) |
| self._VerifyContentExceptionUI( |
| ContentTypes.PLUGINS, 'http://maps.google.com:80', |
| Behaviors.BLOCK, incognito=True) |
| |
| def testSetCookieAndDeleteInContentSettings(self): |
| """Verify a cookie can be deleted in the Content Settings UI.""" |
| # Create a cookie. |
| cookie_dict = { |
| 'name': 'test_cookie', |
| 'value': 'test_value', |
| 'expiry': time.time() + 30, |
| } |
| site = '127.0.0.1' |
| self.NavigateToURL(self.GetHttpURLForDataPath('google', 'google.html')) |
| self._driver.add_cookie(cookie_dict) |
| page = settings.CookiesAndSiteDataSettings.FromNavigation(self._driver) |
| page.DeleteSiteData(site) |
| self.assertTrue(site not in page.GetSiteNameList(), |
| 'Site "%s" was not deleted.' % site) |
| |
| def testRemoveMailProtocolHandler(self): |
| """Verify the mail protocol handler is added and removed successfully.""" |
| url = self.GetHttpURLForDataPath('settings', 'protocol_handler.html') |
| self.NavigateToURL(url) |
| # Returns a dictionary with the mail handler that was asked for |
| # registration. |
| asked_handler_dict = self._driver.execute_script( |
| 'return registerMailClient()') |
| self.PerformActionOnInfobar( |
| 'accept', infobar_index=test_utils.WaitForInfobarTypeAndGetIndex( |
| self, self.INFOBAR_TYPE)) |
| self._driver.find_element_by_id('test_mail_protocol').click() |
| |
| protocol_handlers_list = ( |
| self.GetPrefsInfo().Prefs(pyauto.kRegisteredProtocolHandlers)) |
| registered_mail_handler = {} |
| for handler_dict in protocol_handlers_list: |
| if (handler_dict['protocol'] == 'mailto' and |
| handler_dict['url'] == asked_handler_dict['url'] and |
| handler_dict['title'] == asked_handler_dict['title'] and |
| handler_dict.get('default')): |
| registered_mail_handler = handler_dict |
| break |
| # Verify the mail handler is registered as asked. |
| self.assertNotEqual( |
| registered_mail_handler, {}, |
| msg='Mail protocol handler was not registered correctly.') |
| # Verify the registered mail handler works as expected. |
| self.assertTrue( |
| self._driver.execute_script( |
| 'return doesQueryConformsToProtocol("%s", "%s")' |
| % (asked_handler_dict['query_key'], |
| asked_handler_dict['query_value'])), |
| msg='Mail protocol did not register correctly.') |
| |
| self._driver.get('chrome://settings-frame/handlers') |
| # There are 3 DIVs in a handler entry. The last one acts as a remove button. |
| # The remove button is also equivalent to setting the site to NONE. |
| self._driver.find_element_by_id('handlers-list').\ |
| find_element_by_xpath('.//div[@role="listitem"]').\ |
| find_element_by_xpath('.//div[@class="handlers-site-column"]').\ |
| find_element_by_xpath('.//option[@value="-1"]').click() |
| |
| self._driver.get(url) |
| self._driver.find_element_by_id('test_mail_protocol').click() |
| self.assertEqual(url, self._driver.current_url, |
| msg='Mail protocol still registered.') |
| |
| class BasicSettingsUITest(pyauto.PyUITest): |
| """Testcases for uber page basic settings UI.""" |
| |
| def setUp(self): |
| pyauto.PyUITest.setUp(self) |
| self._driver = self.NewWebDriver() |
| |
| def Debug(self): |
| """chrome://plugins test debug method. |
| |
| This method will not run automatically. |
| """ |
| driver = self.NewWebDriver() |
| page = settings.BasicSettingsPage.FromNavigation(driver) |
| import pdb |
| pdb.set_trace() |
| |
| def testOnStartupSettings(self): |
| """Verify user can set startup options.""" |
| page = settings.BasicSettingsPage.FromNavigation(self._driver) |
| page.SetOnStartupOptions(RestoreOnStartupType.NEW_TAB_PAGE) |
| self.assertEqual(RestoreOnStartupType.NEW_TAB_PAGE, |
| self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup)) |
| page.SetOnStartupOptions(RestoreOnStartupType.RESTORE_SESSION) |
| self.assertEqual(RestoreOnStartupType.RESTORE_SESSION, |
| self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup)) |
| page.SetOnStartupOptions(RestoreOnStartupType.RESTORE_URLS) |
| self.assertEqual(RestoreOnStartupType.RESTORE_URLS, |
| self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup)) |
| |
| def testSetStartupPages(self): |
| """Verify user can add urls for startup pages.""" |
| page = settings.BasicSettingsPage.FromNavigation(self._driver) |
| for url in ['www.google.com', 'http://www.amazon.com', 'ebay.com']: |
| page.AddStartupPage(url) |
| self.assertEqual(RestoreOnStartupType.RESTORE_URLS, |
| self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup)) |
| startup_urls = self.GetPrefsInfo().Prefs(pyauto.kURLsToRestoreOnStartup) |
| self.assertEqual(startup_urls[0], 'http://www.google.com/') |
| self.assertEqual(startup_urls[1], 'http://www.amazon.com/') |
| self.assertEqual(startup_urls[2], 'http://ebay.com/') |
| |
| def testUseCurrentPagesForStartup(self): |
| """Verify user can start up browser using current pages.""" |
| page = settings.BasicSettingsPage.FromNavigation(self._driver) |
| self.OpenNewBrowserWindow(True) |
| url1 = self.GetHttpURLForDataPath('title2.html') |
| url2 = self.GetHttpURLForDataPath('title3.html') |
| self.NavigateToURL(url1, 1, 0) |
| self.AppendTab(pyauto.GURL(url2), 1) |
| title_list = ['Title Of Awesomeness', |
| 'Title Of More Awesomeness'] |
| page.UseCurrentPageForStartup(title_list) |
| page.VerifyStartupURLs(title_list) |
| self.assertEqual(RestoreOnStartupType.RESTORE_URLS, |
| self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup)) |
| startup_urls = self.GetPrefsInfo().Prefs(pyauto.kURLsToRestoreOnStartup) |
| self.assertEqual(len(startup_urls), 3) |
| self.assertEqual(startup_urls[1], url1) |
| self.assertEqual(startup_urls[2], url2) |
| |
| def testCancelStartupURLSetting(self): |
| """Verify canceled start up URLs settings are not saved.""" |
| page = settings.BasicSettingsPage.FromNavigation(self._driver) |
| for url in ['www.google.com', 'http://www.amazon.com']: |
| page.CancelStartupURLSetting(url) |
| startup_urls = self.GetPrefsInfo().Prefs(pyauto.kURLsToRestoreOnStartup) |
| self.assertEqual(len(startup_urls), 0) |
| |
| |
| if __name__ == '__main__': |
| pyauto_functional.Main() |