OLD | NEW |
| (Empty) |
1 #!/usr/bin/env python | |
2 | |
3 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
4 # Use of this source code is governed by a BSD-style license that can be | |
5 # found in the LICENSE file. | |
6 | |
7 import logging | |
8 import time | |
9 | |
10 import pyauto_functional | |
11 import pyauto | |
12 import pyauto_utils | |
13 import timer_queue | |
14 | |
15 | |
16 class ChromeOSLongTerm(pyauto.PyUITest): | |
17 """Set of long running tests for ChromeOS. | |
18 | |
19 This class is comprised of several tests that perform long term tests. | |
20 """ | |
21 | |
22 def _ActivateTabWithURL(self, url): | |
23 """Activates the window that has the given tab url. | |
24 | |
25 Args: | |
26 url: The url of the tab to find. | |
27 | |
28 Returns: | |
29 An array of the index values of the tab and window. Returns None if the | |
30 tab connot be found. | |
31 """ | |
32 info = self.GetBrowserInfo() | |
33 windows = info['windows'] | |
34 for window_index, window in enumerate(windows): | |
35 tabs = window['tabs'] | |
36 for tab_index, tab in enumerate(tabs): | |
37 tab['url'] = tab['url'].strip('/') | |
38 if tab['url'] == url: | |
39 self.ActivateTab(tab_index, window_index) | |
40 return [tab_index, window_index] | |
41 return None | |
42 | |
43 def _SetupLongTermWindow(self, long_term_pages): | |
44 """Appends a list of tab to the current active window. | |
45 | |
46 Args: | |
47 long_term_pages: The list of urls to open. | |
48 """ | |
49 for url in long_term_pages: | |
50 self.AppendTab(pyauto.GURL(url)) | |
51 | |
52 def _RefreshLongTermWindow(self, long_term_pages): | |
53 """ Refreshes all of the tabs from the given list. | |
54 | |
55 Args: | |
56 long_term_pages: The list of urls to refresh. | |
57 """ | |
58 for page in long_term_pages: | |
59 long_index = self._ActivateTabWithURL(page) | |
60 if not long_index: | |
61 logging.info('Unable to find page with url: %s.') | |
62 else: | |
63 self.ActivateTab(long_index[0], long_index[1]) | |
64 self.ReloadActiveTab(long_index[1]) | |
65 | |
66 def _ConfigureNewWindow(self, pages, incognito=False): | |
67 """Setups a windows with multiple tabs running. | |
68 | |
69 This method acts as a state machine. If a window containing a tab with the | |
70 url of the first item of pages it closes that window. If that window | |
71 cannot be found then a new window with the urls in pages is opened. | |
72 | |
73 Args: | |
74 pages: The list of urls to load. | |
75 """ | |
76 page_index = self._ActivateTabWithURL(pages[0]) | |
77 if not page_index: | |
78 # This means the pages do not exist, load them | |
79 if incognito: | |
80 self.RunCommand(pyauto.IDC_NEW_INCOGNITO_WINDOW) | |
81 else: | |
82 self.OpenNewBrowserWindow(True) | |
83 for url in pages: | |
84 self.AppendTab(pyauto.GURL(url), self.GetBrowserWindowCount() - 1) | |
85 # Cycle through the pages to make sure they render | |
86 win = self.GetBrowserInfo()['windows'][self.GetBrowserWindowCount() - 1] | |
87 for tab in win['tabs']: | |
88 self.ActivateTab(tab['index'], self.GetBrowserWindowCount() - 1) | |
89 # Give the plugin time to activate | |
90 time.sleep(1.5) | |
91 else: | |
92 self.CloseBrowserWindow(page_index[1]) | |
93 | |
94 def testLongTerm(self): | |
95 """Main entry point for the long term tests. | |
96 | |
97 This method will spin in a while loop forever until it encounters a keyboard | |
98 interrupt. Other worker methods will be managed by the TimerQueue. | |
99 """ | |
100 long_term_pages = ['http://news.google.com', 'http://www.engadget.com', | |
101 'http://www.washingtonpost.com'] | |
102 | |
103 flash_pages = [ | |
104 'http://www.craftymind.com/factory/guimark2/FlashChartingTest.swf', | |
105 'http://www.craftymind.com/factory/guimark2/FlashGamingTest.swf', | |
106 'http://www.craftymind.com/factory/guimark2/FlashTextTest.swf'] | |
107 | |
108 incognito_pages = ['http://www.msn.com', 'http://www.ebay.com', | |
109 'http://www.bu.edu', 'http://www.youtube.com'] | |
110 | |
111 start_time = time.time() | |
112 self._SetupLongTermWindow(long_term_pages) | |
113 timers = timer_queue.TimerQueue() | |
114 timers.AddTimer(self._ConfigureNewWindow, 90, args=(flash_pages,)) | |
115 timers.AddTimer(self._RefreshLongTermWindow, 30, args=(long_term_pages,)) | |
116 timers.AddTimer(self._ConfigureNewWindow, 15, args=(incognito_pages, True)) | |
117 timers.start() | |
118 try: | |
119 while True: | |
120 if not timers.is_alive(): | |
121 logging.error('Timer queue died, shutting down.') | |
122 return | |
123 time.sleep(1) | |
124 | |
125 except KeyboardInterrupt: | |
126 # Kill the timers | |
127 timers.Stop() | |
128 | |
129 | |
130 if __name__ == '__main__': | |
131 pyauto_functional.Main() | |
OLD | NEW |