Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(210)

Side by Side Diff: chrome/test/functional/infobars.py

Issue 222873002: Remove pyauto tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: sync Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/test/functional/gtalk/test_basic.py ('k') | chrome/test/functional/ispy/OWNERS » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 # Copyright 2013 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.
5
6 import logging
7 import os
8 import re
9
10 import pyauto_functional # Must be imported before pyauto
11 import pyauto
12 import test_utils
13
14
15 class InfobarTest(pyauto.PyUITest):
16 """TestCase for Infobars."""
17
18 def Debug(self):
19 """Test method for experimentation.
20
21 This method will not run automatically.
22 To run:
23 python chrome/test/functional/infobars.py infobars.InfobarTest.Debug
24 """
25 while True:
26 raw_input('Hit <enter> to dump info.. ')
27 info = self.GetBrowserInfo()
28 for window in info['windows']:
29 for tab in window['tabs']:
30 print 'Window', window['index'], 'tab', tab['index']
31 self.pprint(tab['infobars'])
32
33 def setUp(self):
34 pyauto.PyUITest.setUp(self)
35 self._flash_plugin_type = 'Plug-in'
36 if self.GetBrowserInfo()['properties']['branding'] == 'Google Chrome':
37 self._flash_plugin_type = 'Pepper Plugin'
38 # Forcibly trigger all plugins to get registered. crbug.com/94123
39 # Sometimes flash files loaded too quickly after firing browser
40 # ends up getting downloaded, which seems to indicate that the plugin
41 # hasn't been registered yet.
42 self.GetPluginsInfo()
43
44 def _GetTabInfo(self, windex=0, tab_index=0):
45 """Helper to return info for the given tab in the given window.
46
47 Defaults to first tab in first window.
48 """
49 return self.GetBrowserInfo()['windows'][windex]['tabs'][tab_index]
50
51 def testPluginCrashInfobar(self):
52 """Verify the "plugin crashed" infobar."""
53 flash_url = self.GetFileURLForContentDataPath('plugin', 'flash.swf')
54 # Trigger flash plugin
55 self.NavigateToURL(flash_url)
56 child_processes = self.GetBrowserInfo()['child_processes']
57 flash = [x for x in child_processes if
58 x['type'] == self._flash_plugin_type and
59 x['name'] == 'Shockwave Flash'][0]
60 self.assertTrue(flash)
61 logging.info('Killing flash plugin. pid %d' % flash['pid'])
62 self.Kill(flash['pid'])
63 self.assertTrue(self.WaitForInfobarCount(1))
64 crash_infobar = self._GetTabInfo()['infobars']
65 self.assertTrue(crash_infobar)
66 self.assertEqual(1, len(crash_infobar))
67 self.assertTrue('crashed' in crash_infobar[0]['text'])
68 self.assertEqual('confirm_infobar', crash_infobar[0]['type'])
69 # Dismiss the infobar
70 self.PerformActionOnInfobar('dismiss', infobar_index=0)
71 self.assertFalse(self._GetTabInfo()['infobars'])
72
73 def _VerifyGeolocationInfobar(self, windex, tab_index):
74 """Verify geolocation infobar properties.
75
76 Assumes that geolocation infobar is showing up in the given tab in the
77 given window.
78 """
79 # TODO(dyu): Remove this helper function when a function to identify
80 # infobar_type and index of the type is implemented.
81 tab_info = self._GetTabInfo(windex, tab_index)
82 geolocation_infobar = tab_info['infobars']
83 self.assertTrue(geolocation_infobar)
84 self.assertEqual(1, len(geolocation_infobar))
85 self.assertEqual('Learn more', geolocation_infobar[0]['link_text'])
86 self.assertEqual(2, len(geolocation_infobar[0]['buttons']))
87 self.assertEqual('Allow', geolocation_infobar[0]['buttons'][0])
88 self.assertEqual('Deny', geolocation_infobar[0]['buttons'][1])
89
90 def testGeolocationInfobar(self):
91 """Verify geoLocation infobar."""
92 url = self.GetHttpURLForDataPath('geolocation', 'geolocation_on_load.html')
93 self.NavigateToURL(url)
94 self.assertTrue(self.WaitForInfobarCount(1))
95 self._VerifyGeolocationInfobar(windex=0, tab_index=0)
96 # Accept, and verify that the infobar went away
97 self.PerformActionOnInfobar('accept', infobar_index=0)
98 self.assertFalse(self._GetTabInfo()['infobars'])
99
100 def testGeolocationInfobarInMultipleTabsAndWindows(self):
101 """Verify GeoLocation inforbar in multiple tabs."""
102 url = self.GetFileURLForDataPath( # triggers geolocation
103 'geolocation', 'geolocation_on_load.html')
104 for tab_index in range(1, 2):
105 self.AppendTab(pyauto.GURL(url))
106 self.assertTrue(
107 self.WaitForInfobarCount(1, windex=0, tab_index=tab_index))
108 self._VerifyGeolocationInfobar(windex=0, tab_index=tab_index)
109 # Try in a new window
110 self.OpenNewBrowserWindow(True)
111 self.NavigateToURL(url, 1, 0)
112 self.assertTrue(self.WaitForInfobarCount(1, windex=1, tab_index=0))
113 self._VerifyGeolocationInfobar(windex=1, tab_index=0)
114 # Incognito window
115 self.RunCommand(pyauto.IDC_NEW_INCOGNITO_WINDOW)
116 self.NavigateToURL(url, 2, 0)
117 self.assertTrue(self.WaitForInfobarCount(1, windex=2, tab_index=0))
118 self._VerifyGeolocationInfobar(windex=2, tab_index=0)
119
120 def _GetFlashCrashInfobarCount(self, windex=0, tab_index=0):
121 """Returns the count of 'Shockwave Flash has crashed' infobars."""
122 browser_window = self.GetBrowserInfo()['windows'][windex]
123 infobars = browser_window['tabs'][tab_index]['infobars']
124 flash_crash_infobar_count = 0
125 for infobar in infobars:
126 if (('text' in infobar) and
127 infobar['text'].startswith('Shockwave Flash has crashed')):
128 flash_crash_infobar_count += 1
129 return flash_crash_infobar_count
130
131 def testPluginCrashForMultiTabs(self):
132 """Verify plugin crash infobar shows up only on the tabs using plugin."""
133 non_flash_url = self.GetFileURLForDataPath('english_page.html')
134 flash_url = self.GetFileURLForContentDataPath('plugin', 'FlashSpin.swf')
135 # False = Non flash url, True = Flash url
136 # We have set of these values to compare a flash page and a non-flash page
137 urls_type = [False, True, False, True, False]
138 for _ in range(2):
139 self.AppendTab(pyauto.GURL(flash_url))
140 self.AppendTab(pyauto.GURL(non_flash_url))
141 # Killing flash process
142 child_processes = self.GetBrowserInfo()['child_processes']
143 flash = [x for x in child_processes if
144 x['type'] == self._flash_plugin_type and
145 x['name'] == 'Shockwave Flash'][0]
146 self.assertTrue(flash)
147 self.Kill(flash['pid'])
148 # Crash plugin infobar should show up in the second tab of this window
149 # so passing window and tab argument in the wait for an infobar.
150 self.assertTrue(self.WaitForInfobarCount(1, windex=0, tab_index=1))
151 for i in range(len(urls_type)):
152 # Verify that if page doesn't have flash plugin,
153 # it should not have infobar popped-up
154 self.ActivateTab(i)
155 if not urls_type[i]:
156 self.assertEqual(
157 self._GetFlashCrashInfobarCount(0, i), 0,
158 msg='Did not expect crash infobar in tab at index %d' % i)
159 elif urls_type[i]:
160 self.assertEqual(
161 self._GetFlashCrashInfobarCount(0, i), 1,
162 msg='Expected crash infobar in tab at index %d' % i)
163 infobar = self.GetBrowserInfo()['windows'][0]['tabs'][i]['infobars']
164 self.assertEqual(infobar[0]['type'], 'confirm_infobar')
165 self.assertEqual(len(infobar), 1)
166
167
168 class OneClickInfobarTest(pyauto.PyUITest):
169 """Tests for one-click sign in infobar."""
170
171 BLOCK_COOKIE_PATTERN = {'https://accounts.google.com/': {'cookies': 2}}
172 OC_INFOBAR_TYPE = 'oneclicklogin_infobar'
173 PW_INFOBAR_TYPE = 'password_infobar'
174 URL = 'https://www.google.com/accounts/ServiceLogin'
175 URL_LOGIN = 'https://www.google.com/accounts/Login'
176 URL_LOGOUT = 'https://www.google.com/accounts/Logout'
177
178 def setUp(self):
179 pyauto.PyUITest.setUp(self)
180 self._driver = self.NewWebDriver()
181
182 def _LogIntoGoogleAccount(self, tab_index=0, windex=0):
183 """Log into Google account.
184
185 Args:
186 tab_index: The tab index, default is 0.
187 windex: The window index, default is 0.
188 """
189 creds = self.GetPrivateInfo()['test_google_account']
190 username = creds['username']
191 password = creds['password']
192 test_utils.GoogleAccountsLogin(self, username, password, tab_index, windex)
193 # TODO(dyu): Use WaitUntilNavigationCompletes after investigating
194 # crbug.com/124877
195 self.WaitUntil(
196 lambda: self.GetDOMValue('document.readyState'),
197 expect_retval='complete')
198
199 def _PerformActionOnInfobar(self, action):
200 """Perform an action on the infobar: accept, cancel, or dismiss.
201
202 The one-click sign in infobar must show in the first tab of the first
203 window. If action is 'accept' then the account is synced. If the action is
204 'cancel' then the infobar should be dismissed and never shown again. The
205 account will not be synced. If the action is 'dismiss' then the infobar will
206 shown again after the next login.
207
208 Args:
209 action: The action to perform on the infobar.
210 """
211 infobar_index = test_utils.WaitForInfobarTypeAndGetIndex(
212 self, self.OC_INFOBAR_TYPE)
213 self.PerformActionOnInfobar(action, infobar_index)
214
215 def _DisplayOneClickInfobar(self, tab_index=0, windex=0):
216 """One-click sign in infobar appears after logging into google account.
217
218 Args:
219 tab_index: The tab index, default is 0.
220 windex: The window index, default is 0.
221 """
222 self._LogIntoGoogleAccount(tab_index=tab_index, windex=windex)
223 self.assertTrue(self.WaitUntil(
224 lambda: test_utils.GetInfobarIndexByType(
225 self, self.OC_INFOBAR_TYPE,
226 tab_index=tab_index, windex=windex) is not None),
227 msg='The one-click login infobar did not appear.')
228
229 def testDisplayOneClickInfobar(self):
230 """Verify one-click infobar appears after login into google account.
231
232 One-click infobar should appear after signing into a google account
233 for the first time using a clean profile.
234 """
235 self._DisplayOneClickInfobar()
236
237 def testNoOneClickInfobarAfterCancel(self):
238 """Verify one-click infobar does not appear again after clicking cancel.
239
240 The one-click infobar should not display again after logging into an
241 account and selecting to reject sync the first time. The test covers
242 restarting the browser with the same profile and verifying the one-click
243 infobar does not show after login.
244
245 This test also verifies that the password infobar displays.
246 """
247 self._DisplayOneClickInfobar()
248 self._PerformActionOnInfobar(action='cancel') # Click 'No thanks' button.
249 self.NavigateToURL(self.URL_LOGOUT)
250 self._LogIntoGoogleAccount()
251 test_utils.WaitForInfobarTypeAndGetIndex(self, self.PW_INFOBAR_TYPE)
252 test_utils.AssertInfobarTypeDoesNotAppear(self, self.OC_INFOBAR_TYPE)
253 # Restart browser with the same profile.
254 self.RestartBrowser(clear_profile=False)
255 self.NavigateToURL(self.URL_LOGOUT)
256 self._LogIntoGoogleAccount()
257 test_utils.AssertInfobarTypeDoesNotAppear(self, self.OC_INFOBAR_TYPE)
258
259 def testDisplayOneClickInfobarAfterDismiss(self):
260 """Verify one-click infobar appears again after clicking dismiss button.
261
262 The one-click infobar should display again after logging into an
263 account and clicking to dismiss the infobar the first time.
264
265 This test also verifies that the password infobar does not display.
266 The one-click infobar should supersede the password infobar.
267 """
268 self._DisplayOneClickInfobar()
269 self._PerformActionOnInfobar(action='dismiss') # Click 'x' button.
270 self.NavigateToURL(self.URL_LOGOUT)
271 self._LogIntoGoogleAccount()
272 test_utils.WaitForInfobarTypeAndGetIndex(self, self.OC_INFOBAR_TYPE)
273 test_utils.AssertInfobarTypeDoesNotAppear(self, self.PW_INFOBAR_TYPE)
274
275 def _OpenSecondProfile(self):
276 """Create a second profile."""
277 self.OpenNewBrowserWindowWithNewProfile()
278 self.assertEqual(2, len(self.GetMultiProfileInfo()['profiles']),
279 msg='The second profile was not created.')
280
281 def testDisplayOneClickInfobarPerProfile(self):
282 """Verify one-click infobar appears for each profile after sign-in."""
283 # Default profile.
284 self._DisplayOneClickInfobar()
285 self._OpenSecondProfile()
286 self._DisplayOneClickInfobar(windex=1)
287
288 def testNoOneClickInfobarWhenCookiesBlocked(self):
289 """Verify one-click infobar does not show when cookies are blocked.
290
291 One-click sign in should not be enabled if cookies are blocked for Google
292 accounts domain.
293
294 This test verifies the following bug: crbug.com/117841
295 """
296 # Block cookies for Google accounts domain.
297 self.SetPrefs(pyauto.kContentSettingsPatternPairs,
298 self.BLOCK_COOKIE_PATTERN)
299 self._LogIntoGoogleAccount()
300 test_utils.AssertInfobarTypeDoesNotAppear(self, self.OC_INFOBAR_TYPE)
301
302 def testOneClickInfobarShownWhenWinLoseFocus(self):
303 """Verify one-click infobar still shows when window loses focus.
304
305 This test verifies the following bug: crbug.com/121739
306 """
307 self._LogIntoGoogleAccount()
308 test_utils.WaitForInfobarTypeAndGetIndex(self, self.OC_INFOBAR_TYPE)
309 # Open new window to shift focus away.
310 self.OpenNewBrowserWindow(True)
311 test_utils.GetInfobarIndexByType(self, self.OC_INFOBAR_TYPE)
312
313 def testNoOneClickInfobarInIncognito(self):
314 """Verify that one-click infobar does not show up in incognito mode."""
315 self.RunCommand(pyauto.IDC_NEW_INCOGNITO_WINDOW)
316 self._LogIntoGoogleAccount(windex=1)
317 test_utils.AssertInfobarTypeDoesNotAppear(
318 self, self.OC_INFOBAR_TYPE, windex=1)
319
320
321 if __name__ == '__main__':
322 pyauto_functional.Main()
OLDNEW
« no previous file with comments | « chrome/test/functional/gtalk/test_basic.py ('k') | chrome/test/functional/ispy/OWNERS » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698