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