| 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 |