2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
8 import pyauto_functional # Must be imported before pyauto
12 from webdriver_pages import settings
13 from webdriver_pages.settings import Behaviors, ContentTypes
14 from webdriver_pages.settings import RestoreOnStartupType
17 class PrefsUITest(pyauto.PyUITest):
18 """TestCase for Preferences UI."""
20 INFOBAR_TYPE = 'rph_infobar'
23 pyauto.PyUITest.setUp(self)
24 self._driver = self.NewWebDriver()
27 """Test method for experimentation.
29 This method will not run automatically.
31 driver = self.NewWebDriver()
32 page = settings.ContentSettingsPage.FromNavigation(driver)
36 def _GetGeolocationContentSettingsBehavior(self):
37 """Get the Content Settings behavior for Geolocation.
40 The exceptions behavior for the specified content type.
41 The content type is the available content setting available.
43 behavior_key = self.GetPrefsInfo().Prefs(
44 pyauto.kGeolocationDefaultContentSetting)
45 behaviors_dict = {1: 'ALLOW', 2: 'BLOCK', 3: 'ASK'}
47 behavior_key in behaviors_dict,
48 msg=('Invalid default behavior key "%s" for "geolocation" content' %
50 return behaviors_dict[behavior_key]
52 def _VerifyContentExceptionUI(self, content_type, hostname_pattern, behavior,
54 """Find hostname pattern and behavior within UI on content exceptions page.
57 content_type: The string content settings type to manage.
58 hostname_pattern: The URL or pattern associated with the behavior.
59 behavior: The exception to allow or block the hostname.
60 incognito: Incognito list displayed on exceptions settings page.
63 page = settings.ManageExceptionsPage.FromNavigation(
64 self._driver, content_type)
65 self.assertTrue(page.GetExceptions(incognito).has_key(hostname_pattern),
66 msg=('No displayed host name matches pattern "%s"'
68 self.assertEqual(behavior, page.GetExceptions(incognito)[hostname_pattern],
69 msg=('Displayed behavior "%s" does not match behavior "%s"'
70 % (page.GetExceptions(incognito)[hostname_pattern],
73 def testLocationSettingOptionsUI(self):
74 """Verify the location options setting UI.
76 Set the options through the UI using webdriver and verify the settings in
79 page = settings.ContentSettingsPage.FromNavigation(self._driver)
80 page.SetContentTypeOption(ContentTypes.GEOLOCATION, Behaviors.ALLOW)
82 1, self.GetPrefsInfo().Prefs(pyauto.kGeolocationDefaultContentSetting))
83 page.SetContentTypeOption(ContentTypes.GEOLOCATION, Behaviors.BLOCK)
85 2, self.GetPrefsInfo().Prefs(pyauto.kGeolocationDefaultContentSetting))
86 page.SetContentTypeOption(ContentTypes.GEOLOCATION, Behaviors.ASK)
88 3, self.GetPrefsInfo().Prefs(pyauto.kGeolocationDefaultContentSetting))
90 def testBehaviorValueCorrectlyDisplayed(self):
91 """Verify the set behavior value is correctly displayed."""
93 self.SetPrefs(pyauto.kGeolocationDefaultContentSetting, 2)
95 self._GetGeolocationContentSettingsBehavior(), Behaviors.BLOCK.upper(),
96 msg='The behavior was incorrectly set.')
98 self.SetPrefs(pyauto.kGeolocationDefaultContentSetting, 1)
100 self._GetGeolocationContentSettingsBehavior(), Behaviors.ALLOW.upper(),
101 msg='The behavior was incorrectly set.')
102 # Ask for permission when site wants to track.
103 self.SetPrefs(pyauto.kGeolocationDefaultContentSetting, 3)
105 self._GetGeolocationContentSettingsBehavior(), Behaviors.ASK.upper(),
106 msg='The behavior was incorrectly set.')
108 def testExceptionsEntryCorrectlyDisplayed(self):
109 """Verify the exceptions line entry is correctly displayed in the UI."""
111 {'http://maps.google.com:80,http://maps.google.com:80':
113 self.SetPrefs(pyauto.kContentSettingsPatternPairs, geo_exception)
114 self._VerifyContentExceptionUI(
115 ContentTypes.GEOLOCATION, 'http://maps.google.com:80',
118 {'http://maps.google.com:80,http://maps.google.com:80':
120 self.SetPrefs(pyauto.kContentSettingsPatternPairs, geo_exception)
121 self._VerifyContentExceptionUI(
122 ContentTypes.GEOLOCATION, 'http://maps.google.com:80',
125 {'http://maps.google.com:80,http://maps.google.com:80':
127 self.SetPrefs(pyauto.kContentSettingsPatternPairs, geo_exception)
128 self._VerifyContentExceptionUI(
129 ContentTypes.GEOLOCATION, 'http://maps.google.com:80', Behaviors.ASK)
131 def testAddNewExceptionUI(self):
132 """Verify new exception added for hostname pattern and behavior in UI."""
133 content_type = ContentTypes.PLUGINS
134 page = settings.ManageExceptionsPage.FromNavigation(
135 self._driver, content_type)
137 pattern, behavior = ('bing.com', Behaviors.BLOCK)
138 page.AddNewException(pattern, behavior)
139 self.assertEqual(page.GetExceptions()[pattern], Behaviors.BLOCK,
140 msg='The behavior "%s" was not added for pattern "%s"'
141 % (behavior, pattern))
143 def testChangeExceptionBehaviorUI(self):
144 """Verify behavior for hostname pattern is changed in the UI."""
145 content_type = ContentTypes.PLUGINS
146 page = settings.ManageExceptionsPage.FromNavigation(
147 self._driver, content_type)
149 pattern, behavior = ('bing.com', Behaviors.BLOCK)
150 page.AddNewException(pattern, behavior)
151 new_behavior = Behaviors.ALLOW
152 page.SetBehaviorForPattern(pattern, new_behavior)
153 self.assertEqual(page.GetExceptions()[pattern], Behaviors.ALLOW,
154 msg='The behavior for "%s" did not change: "%s"'
155 % (pattern, behavior))
157 def testDeleteExceptionUI(self):
158 """Verify exception deleted for hostname pattern and behavior in the UI."""
159 content_type = ContentTypes.PLUGINS
160 page = settings.ManageExceptionsPage.FromNavigation(
161 self._driver, content_type)
163 pattern, behavior = ('bing.com', Behaviors.BLOCK)
164 page.AddNewException(pattern, behavior)
165 self.assertEqual(page.GetExceptions()[pattern], Behaviors.BLOCK,
166 msg='The behavior "%s" was not added for pattern "%s"'
167 % (behavior, pattern))
168 page.DeleteException(pattern)
169 self.assertEqual(page.GetExceptions().get(pattern, KeyError), KeyError,
170 msg='Pattern "%s" was not deleted' % pattern)
172 def testNoInitialLineEntryInUI(self):
173 """Verify no initial line entry is displayed in UI."""
174 # Ask for permission when site wants to track.
175 self.SetPrefs(pyauto.kGeolocationDefaultContentSetting, 3)
177 3, self.GetPrefsInfo().Prefs(pyauto.kGeolocationDefaultContentSetting))
178 page = settings.ManageExceptionsPage.FromNavigation(
179 self._driver, ContentTypes.GEOLOCATION)
180 self.assertEqual(0, len(page.GetExceptions()))
182 def testCorrectCookiesSessionInUI(self):
183 """Verify exceptions for cookies in UI list entry."""
184 # Block cookies for for a session for google.com.
185 self.SetPrefs(pyauto.kContentSettingsPatternPairs,
186 {'http://google.com:80': {'cookies': 2}})
187 self._VerifyContentExceptionUI(
188 ContentTypes.COOKIES, 'http://google.com:80', Behaviors.BLOCK)
190 def testInitialLineEntryInIncognitoUI(self):
191 """Verify initial line entry is displayed in Incognito UI."""
192 self.RunCommand(pyauto.IDC_NEW_INCOGNITO_WINDOW) # Display incognito list.
193 page = settings.ManageExceptionsPage.FromNavigation(
194 self._driver, ContentTypes.PLUGINS)
195 self.assertEqual(1, len(page.GetExceptions(incognito=True)))
197 def testIncognitoExceptionsEntryCorrectlyDisplayed(self):
198 """Verify exceptions entry is correctly displayed in the incognito UI."""
199 self.RunCommand(pyauto.IDC_NEW_INCOGNITO_WINDOW) # Display incognito list.
200 page = settings.ManageExceptionsPage.FromNavigation(
201 self._driver, ContentTypes.PLUGINS)
202 pattern, behavior = ('http://maps.google.com:80', Behaviors.BLOCK)
203 page.AddNewException(pattern, behavior, incognito=True)
204 self._VerifyContentExceptionUI(
205 ContentTypes.PLUGINS, 'http://maps.google.com:80',
206 Behaviors.BLOCK, incognito=True)
208 def testSetCookieAndDeleteInContentSettings(self):
209 """Verify a cookie can be deleted in the Content Settings UI."""
212 'name': 'test_cookie',
213 'value': 'test_value',
214 'expiry': time.time() + 30,
217 self.NavigateToURL(self.GetHttpURLForDataPath('google', 'google.html'))
218 self._driver.add_cookie(cookie_dict)
219 page = settings.CookiesAndSiteDataSettings.FromNavigation(self._driver)
220 page.DeleteSiteData(site)
221 self.assertTrue(site not in page.GetSiteNameList(),
222 'Site "%s" was not deleted.' % site)
224 def testRemoveMailProtocolHandler(self):
225 """Verify the mail protocol handler is added and removed successfully."""
226 url = self.GetHttpURLForDataPath('settings', 'protocol_handler.html')
227 self.NavigateToURL(url)
228 # Returns a dictionary with the mail handler that was asked for
230 asked_handler_dict = self._driver.execute_script(
231 'return registerMailClient()')
232 self.PerformActionOnInfobar(
233 'accept', infobar_index=test_utils.WaitForInfobarTypeAndGetIndex(
234 self, self.INFOBAR_TYPE))
235 self._driver.find_element_by_id('test_mail_protocol').click()
237 protocol_handlers_list = (
238 self.GetPrefsInfo().Prefs(pyauto.kRegisteredProtocolHandlers))
239 registered_mail_handler = {}
240 for handler_dict in protocol_handlers_list:
241 if (handler_dict['protocol'] == 'mailto' and
242 handler_dict['url'] == asked_handler_dict['url'] and
243 handler_dict['title'] == asked_handler_dict['title'] and
244 handler_dict.get('default')):
245 registered_mail_handler = handler_dict
247 # Verify the mail handler is registered as asked.
249 registered_mail_handler, {},
250 msg='Mail protocol handler was not registered correctly.')
251 # Verify the registered mail handler works as expected.
253 self._driver.execute_script(
254 'return doesQueryConformsToProtocol("%s", "%s")'
255 % (asked_handler_dict['query_key'],
256 asked_handler_dict['query_value'])),
257 msg='Mail protocol did not register correctly.')
259 self._driver.get('chrome://settings-frame/handlers')
260 # There are 3 DIVs in a handler entry. The last one acts as a remove button.
261 # The remove button is also equivalent to setting the site to NONE.
262 self._driver.find_element_by_id('handlers-list').\
263 find_element_by_xpath('.//div[@role="listitem"]').\
264 find_element_by_xpath('.//div[@class="handlers-site-column"]').\
265 find_element_by_xpath('.//option[@value="-1"]').click()
267 self._driver.get(url)
268 self._driver.find_element_by_id('test_mail_protocol').click()
269 self.assertEqual(url, self._driver.current_url,
270 msg='Mail protocol still registered.')
272 class BasicSettingsUITest(pyauto.PyUITest):
273 """Testcases for uber page basic settings UI."""
276 pyauto.PyUITest.setUp(self)
277 self._driver = self.NewWebDriver()
280 """chrome://plugins test debug method.
282 This method will not run automatically.
284 driver = self.NewWebDriver()
285 page = settings.BasicSettingsPage.FromNavigation(driver)
289 def testOnStartupSettings(self):
290 """Verify user can set startup options."""
291 page = settings.BasicSettingsPage.FromNavigation(self._driver)
292 page.SetOnStartupOptions(RestoreOnStartupType.NEW_TAB_PAGE)
293 self.assertEqual(RestoreOnStartupType.NEW_TAB_PAGE,
294 self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup))
295 page.SetOnStartupOptions(RestoreOnStartupType.RESTORE_SESSION)
296 self.assertEqual(RestoreOnStartupType.RESTORE_SESSION,
297 self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup))
298 page.SetOnStartupOptions(RestoreOnStartupType.RESTORE_URLS)
299 self.assertEqual(RestoreOnStartupType.RESTORE_URLS,
300 self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup))
302 def testSetStartupPages(self):
303 """Verify user can add urls for startup pages."""
304 page = settings.BasicSettingsPage.FromNavigation(self._driver)
305 for url in ['www.google.com', 'http://www.amazon.com', 'ebay.com']:
306 page.AddStartupPage(url)
307 self.assertEqual(RestoreOnStartupType.RESTORE_URLS,
308 self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup))
309 startup_urls = self.GetPrefsInfo().Prefs(pyauto.kURLsToRestoreOnStartup)
310 self.assertEqual(startup_urls[0], 'http://www.google.com/')
311 self.assertEqual(startup_urls[1], 'http://www.amazon.com/')
312 self.assertEqual(startup_urls[2], 'http://ebay.com/')
314 def testUseCurrentPagesForStartup(self):
315 """Verify user can start up browser using current pages."""
316 page = settings.BasicSettingsPage.FromNavigation(self._driver)
317 self.OpenNewBrowserWindow(True)
318 url1 = self.GetHttpURLForDataPath('title2.html')
319 url2 = self.GetHttpURLForDataPath('title3.html')
320 self.NavigateToURL(url1, 1, 0)
321 self.AppendTab(pyauto.GURL(url2), 1)
322 title_list = ['Title Of Awesomeness',
323 'Title Of More Awesomeness']
324 page.UseCurrentPageForStartup(title_list)
325 page.VerifyStartupURLs(title_list)
326 self.assertEqual(RestoreOnStartupType.RESTORE_URLS,
327 self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup))
328 startup_urls = self.GetPrefsInfo().Prefs(pyauto.kURLsToRestoreOnStartup)
329 self.assertEqual(len(startup_urls), 3)
330 self.assertEqual(startup_urls[1], url1)
331 self.assertEqual(startup_urls[2], url2)
333 def testCancelStartupURLSetting(self):
334 """Verify canceled start up URLs settings are not saved."""
335 page = settings.BasicSettingsPage.FromNavigation(self._driver)
336 for url in ['www.google.com', 'http://www.amazon.com']:
337 page.CancelStartupURLSetting(url)
338 startup_urls = self.GetPrefsInfo().Prefs(pyauto.kURLsToRestoreOnStartup)
339 self.assertEqual(len(startup_urls), 0)
342 if __name__ == '__main__':
343 pyauto_functional.Main()