15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2011 The Chromium Authors. All rights reserved. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import logging 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import time 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import pyauto_functional 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import pyauto 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import pyauto_utils 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import timer_queue 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChromeOSLongTerm(pyauto.PyUITest): 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Set of long running tests for ChromeOS. 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) This class is comprised of several tests that perform long term tests. 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def _ActivateTabWithURL(self, url): 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Activates the window that has the given tab url. 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Args: 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url: The url of the tab to find. 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Returns: 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) An array of the index values of the tab and window. Returns None if the 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab connot be found. 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info = self.GetBrowserInfo() 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) windows = info['windows'] 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for window_index, window in enumerate(windows): 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tabs = window['tabs'] 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for tab_index, tab in enumerate(tabs): 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tab['url'] = tab['url'].strip('/') 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if tab['url'] == url: 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.ActivateTab(tab_index, window_index) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return [tab_index, window_index] 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return None 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def _SetupLongTermWindow(self, long_term_pages): 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Appends a list of tab to the current active window. 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Args: 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) long_term_pages: The list of urls to open. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for url in long_term_pages: 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.AppendTab(pyauto.GURL(url)) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def _RefreshLongTermWindow(self, long_term_pages): 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ Refreshes all of the tabs from the given list. 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Args: 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) long_term_pages: The list of urls to refresh. 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for page in long_term_pages: 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) long_index = self._ActivateTabWithURL(page) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if not long_index: 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logging.info('Unable to find page with url: %s.') 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else: 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.ActivateTab(long_index[0], long_index[1]) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.ReloadActiveTab(long_index[1]) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def _ConfigureNewWindow(self, pages, incognito=False): 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Setups a windows with multiple tabs running. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) This method acts as a state machine. If a window containing a tab with the 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url of the first item of pages it closes that window. If that window 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cannot be found then a new window with the urls in pages is opened. 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Args: 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pages: The list of urls to load. 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) page_index = self._ActivateTabWithURL(pages[0]) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if not page_index: 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # This means the pages do not exist, load them 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if incognito: 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.RunCommand(pyauto.IDC_NEW_INCOGNITO_WINDOW) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else: 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.OpenNewBrowserWindow(True) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for url in pages: 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.AppendTab(pyauto.GURL(url), self.GetBrowserWindowCount() - 1) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Cycle through the pages to make sure they render 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) win = self.GetBrowserInfo()['windows'][self.GetBrowserWindowCount() - 1] 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for tab in win['tabs']: 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.ActivateTab(tab['index'], self.GetBrowserWindowCount() - 1) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Give the plugin time to activate 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) time.sleep(1.5) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else: 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.CloseBrowserWindow(page_index[1]) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testLongTerm(self): 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Main entry point for the long term tests. 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) This method will spin in a while loop forever until it encounters a keyboard 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) interrupt. Other worker methods will be managed by the TimerQueue. 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """ 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) long_term_pages = ['http://news.google.com', 'http://www.engadget.com', 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'http://www.washingtonpost.com'] 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flash_pages = [ 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'http://www.craftymind.com/factory/guimark2/FlashChartingTest.swf', 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'http://www.craftymind.com/factory/guimark2/FlashGamingTest.swf', 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'http://www.craftymind.com/factory/guimark2/FlashTextTest.swf'] 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) incognito_pages = ['http://www.msn.com', 'http://www.ebay.com', 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'http://www.bu.edu', 'http://www.youtube.com'] 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) start_time = time.time() 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._SetupLongTermWindow(long_term_pages) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) timers = timer_queue.TimerQueue() 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) timers.AddTimer(self._ConfigureNewWindow, 90, args=(flash_pages,)) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) timers.AddTimer(self._RefreshLongTermWindow, 30, args=(long_term_pages,)) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) timers.AddTimer(self._ConfigureNewWindow, 15, args=(incognito_pages, True)) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) timers.start() 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) try: 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while True: 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if not timers.is_alive(): 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) logging.error('Timer queue died, shutting down.') 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) time.sleep(1) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) except KeyboardInterrupt: 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) # Kill the timers 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) timers.Stop() 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__': 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pyauto_functional.Main() 132