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 testSetPasswordAndDelete(self):
209 """Verify a password can be deleted in the Content Settings UI."""
211 # Add two passwords, 1 for example0.com and 1 for example1.com.
213 # Construct a password dictionary with required fields.
215 'username_value': 'user%s@example.com' % i,
216 'password_value': 'test.password',
217 'signon_realm': 'https://www.example%s.com/' % i,
218 'time': 1279650942.0,
219 'origin_url': 'https://www.example%s.com/login' % i,
220 'username_element': 'username%s',
221 'password_element': 'password',
222 'submit_element': 'submit',
223 'action_target': 'https://www.example%s.com/login/' % i,
227 password_list.append(password)
228 self.AddSavedPassword(password)
230 saved_passwords = self.GetSavedPasswords()
231 self.assertEquals(len(password_list), len(saved_passwords),
232 msg='Not all Passwords were saved.')
233 for password in password_list:
234 self.assertTrue(password in saved_passwords,
235 msg='Passwords were not saved correctly.')
237 page = settings.PasswordsSettings.FromNavigation(self._driver)
238 # Delete one of the passwords.
239 password = password_list[1]
240 page.DeleteItem(password['origin_url'], password['username_value'])
241 self.assertTrue(password not in self.GetSavedPasswords(),
242 msg='Password was not deleted.')
244 def testSetCookieAndDeleteInContentSettings(self):
245 """Verify a cookie can be deleted in the Content Settings UI."""
248 'name': 'test_cookie',
249 'value': 'test_value',
250 'expiry': time.time() + 30,
253 self.NavigateToURL(self.GetHttpURLForDataPath('google', 'google.html'))
254 self._driver.add_cookie(cookie_dict)
255 page = settings.CookiesAndSiteDataSettings.FromNavigation(self._driver)
256 page.DeleteSiteData(site)
257 self.assertTrue(site not in page.GetSiteNameList(),
258 'Site "%s" was not deleted.' % site)
260 def testRemoveMailProtocolHandler(self):
261 """Verify the mail protocol handler is added and removed successfully."""
262 url = self.GetHttpURLForDataPath('settings', 'protocol_handler.html')
263 self.NavigateToURL(url)
264 # Returns a dictionary with the mail handler that was asked for
266 asked_handler_dict = self._driver.execute_script(
267 'return registerMailClient()')
268 self.PerformActionOnInfobar(
269 'accept', infobar_index=test_utils.WaitForInfobarTypeAndGetIndex(
270 self, self.INFOBAR_TYPE))
271 self._driver.find_element_by_id('test_mail_protocol').click()
273 protocol_handlers_list = (
274 self.GetPrefsInfo().Prefs(pyauto.kRegisteredProtocolHandlers))
275 registered_mail_handler = {}
276 for handler_dict in protocol_handlers_list:
277 if (handler_dict['protocol'] == 'mailto' and
278 handler_dict['url'] == asked_handler_dict['url'] and
279 handler_dict['title'] == asked_handler_dict['title'] and
280 handler_dict.get('default')):
281 registered_mail_handler = handler_dict
283 # Verify the mail handler is registered as asked.
285 registered_mail_handler, {},
286 msg='Mail protocol handler was not registered correctly.')
287 # Verify the registered mail handler works as expected.
289 self._driver.execute_script(
290 'return doesQueryConformsToProtocol("%s", "%s")'
291 % (asked_handler_dict['query_key'],
292 asked_handler_dict['query_value'])),
293 msg='Mail protocol did not register correctly.')
295 self._driver.get('chrome://settings-frame/handlers')
296 # There are 3 DIVs in a handler entry. The last one acts as a remove button.
297 # The remove button is also equivalent to setting the site to NONE.
298 self._driver.find_element_by_id('handlers-list').\
299 find_element_by_xpath('.//div[@role="listitem"]').\
300 find_element_by_xpath('.//div[@class="handlers-site-column"]').\
301 find_element_by_xpath('.//option[@value="-1"]').click()
303 self._driver.get(url)
304 self._driver.find_element_by_id('test_mail_protocol').click()
305 self.assertEqual(url, self._driver.current_url,
306 msg='Mail protocol still registered.')
308 class BasicSettingsUITest(pyauto.PyUITest):
309 """Testcases for uber page basic settings UI."""
312 pyauto.PyUITest.setUp(self)
313 self._driver = self.NewWebDriver()
316 """chrome://plugins test debug method.
318 This method will not run automatically.
320 driver = self.NewWebDriver()
321 page = settings.BasicSettingsPage.FromNavigation(driver)
325 def testOnStartupSettings(self):
326 """Verify user can set startup options."""
327 page = settings.BasicSettingsPage.FromNavigation(self._driver)
328 page.SetOnStartupOptions(RestoreOnStartupType.NEW_TAB_PAGE)
329 self.assertEqual(RestoreOnStartupType.NEW_TAB_PAGE,
330 self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup))
331 page.SetOnStartupOptions(RestoreOnStartupType.RESTORE_SESSION)
332 self.assertEqual(RestoreOnStartupType.RESTORE_SESSION,
333 self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup))
334 page.SetOnStartupOptions(RestoreOnStartupType.RESTORE_URLS)
335 self.assertEqual(RestoreOnStartupType.RESTORE_URLS,
336 self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup))
338 def testSetStartupPages(self):
339 """Verify user can add urls for startup pages."""
340 page = settings.BasicSettingsPage.FromNavigation(self._driver)
341 for url in ['www.google.com', 'http://www.amazon.com', 'ebay.com']:
342 page.AddStartupPage(url)
343 self.assertEqual(RestoreOnStartupType.RESTORE_URLS,
344 self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup))
345 startup_urls = self.GetPrefsInfo().Prefs(pyauto.kURLsToRestoreOnStartup)
346 self.assertEqual(startup_urls[0], 'http://www.google.com/')
347 self.assertEqual(startup_urls[1], 'http://www.amazon.com/')
348 self.assertEqual(startup_urls[2], 'http://ebay.com/')
350 def testUseCurrentPagesForStartup(self):
351 """Verify user can start up browser using current pages."""
352 page = settings.BasicSettingsPage.FromNavigation(self._driver)
353 self.OpenNewBrowserWindow(True)
354 url1 = self.GetHttpURLForDataPath('title2.html')
355 url2 = self.GetHttpURLForDataPath('title3.html')
356 self.NavigateToURL(url1, 1, 0)
357 self.AppendTab(pyauto.GURL(url2), 1)
358 title_list = ['Title Of Awesomeness',
359 'Title Of More Awesomeness']
360 page.UseCurrentPageForStartup(title_list)
361 page.VerifyStartupURLs(title_list)
362 self.assertEqual(RestoreOnStartupType.RESTORE_URLS,
363 self.GetPrefsInfo().Prefs(pyauto.kRestoreOnStartup))
364 startup_urls = self.GetPrefsInfo().Prefs(pyauto.kURLsToRestoreOnStartup)
365 self.assertEqual(len(startup_urls), 3)
366 self.assertEqual(startup_urls[1], url1)
367 self.assertEqual(startup_urls[2], url2)
369 def testCancelStartupURLSetting(self):
370 """Verify canceled start up URLs settings are not saved."""
371 page = settings.BasicSettingsPage.FromNavigation(self._driver)
372 for url in ['www.google.com', 'http://www.amazon.com']:
373 page.CancelStartupURLSetting(url)
374 startup_urls = self.GetPrefsInfo().Prefs(pyauto.kURLsToRestoreOnStartup)
375 self.assertEqual(len(startup_urls), 0)
378 if __name__ == '__main__':
379 pyauto_functional.Main()