tab_test_case.py revision 46d4c2bc3267f3f028f39e7e311b0f89aba2e4fd
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  def __init__(self, *args):
15    self._extra_browser_args = []
16    self.test_file_path = None
17    self.test_url = None
18    super(TabTestCase, self).__init__(*args)
19
20  def setUp(self):
21    self._browser = None
22    self._tab = None
23    options = options_for_unittests.GetCopy()
24
25    self.CustomizeBrowserOptions(options.browser_options)
26
27    if self._extra_browser_args:
28      options.AppendExtraBrowserArgs(self._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    try:
34      self._browser = browser_to_create.Create()
35      self._browser.Start()
36      self._tab = self._browser.tabs[0]
37      self._tab.Navigate('about:blank')
38      self._tab.WaitForDocumentReadyStateToBeInteractiveOrBetter()
39
40    except:
41      self.tearDown()
42      raise
43
44  def tearDown(self):
45    if self._browser:
46      self._browser.Close()
47
48  def CustomizeBrowserOptions(self, options):
49    """Override to add test-specific options to the BrowserOptions object"""
50    pass
51
52  def Navigate(self, filename, script_to_evaluate_on_commit=None):
53    """Navigates |tab| to |filename| in the unittest data directory.
54
55    Also sets up http server to point to the unittest data directory.
56    """
57    self._browser.SetHTTPServerDirectories(util.GetUnittestDataDir())
58    self.test_file_path = os.path.join(util.GetUnittestDataDir(), filename)
59    self.test_url = self._browser.http_server.UrlOf(self.test_file_path)
60    self._tab.Navigate(self.test_url, script_to_evaluate_on_commit)
61    self._tab.WaitForDocumentReadyStateToBeComplete()
62