tab_test_case.py revision 5f1c94371a64b3196d4be9466099bb892df9b88e
1# Copyright 2012 The Chromium Authors. All rights reserved. 2# Use of this source code is governed by a BSD-style license that can be 3# found in the LICENSE file. 4 5import os 6import unittest 7 8from telemetry.core import browser_finder 9from telemetry.core import util 10from telemetry.unittest import options_for_unittests 11 12 13class TabTestCase(unittest.TestCase): 14 _extra_browser_args = [] 15 16 def __init__(self, *args): 17 super(TabTestCase, self).__init__(*args) 18 19 self._tab = None 20 self.test_file_path = None 21 self.test_url = None 22 23 @classmethod 24 def setUpClass(cls): 25 options = options_for_unittests.GetCopy() 26 cls.CustomizeBrowserOptions(options.browser_options) 27 if cls._extra_browser_args: 28 options.AppendExtraBrowserArgs(cls._extra_browser_args) 29 30 browser_to_create = browser_finder.FindBrowser(options) 31 if not browser_to_create: 32 raise Exception('No browser found, cannot continue test.') 33 34 cls._browser = None 35 try: 36 cls._browser = browser_to_create.Create() 37 cls._browser.Start() 38 except: 39 cls.tearDownClass() 40 raise 41 42 def setUp(self): 43 if self._browser.supports_tab_control: 44 self._tab = self._browser.tabs.New() 45 while len(self._browser.tabs) > 1: 46 self._browser.tabs[0].Close() 47 else: 48 if not self._browser.tabs: 49 self.tearDownClass() 50 self.setUpClass() 51 self._tab = self._browser.tabs[0] 52 self._tab.Navigate('about:blank') 53 self._tab.WaitForDocumentReadyStateToBeInteractiveOrBetter() 54 55 @classmethod 56 def tearDownClass(cls): 57 if cls._browser: 58 cls._browser.Close() 59 60 @classmethod 61 def CustomizeBrowserOptions(cls, options): 62 """Override to add test-specific options to the BrowserOptions object""" 63 pass 64 65 def Navigate(self, filename, script_to_evaluate_on_commit=None): 66 """Navigates |tab| to |filename| in the unittest data directory. 67 68 Also sets up http server to point to the unittest data directory. 69 """ 70 self._browser.SetHTTPServerDirectories(util.GetUnittestDataDir()) 71 self.test_file_path = os.path.join(util.GetUnittestDataDir(), filename) 72 self.test_url = self._browser.http_server.UrlOf(self.test_file_path) 73 self._tab.Navigate(self.test_url, script_to_evaluate_on_commit) 74 self._tab.WaitForDocumentReadyStateToBeComplete() 75