1 # Copyright (c) 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.
7 from telemetry.core import browser_finder
8 from telemetry.core import gpu_device
9 from telemetry.core import gpu_info
10 from telemetry.core import system_info
11 from telemetry.core import util
12 from telemetry.unittest import options_for_unittests
14 class BrowserTest(unittest.TestCase):
18 def CreateBrowser(self,
19 extra_browser_args=None,
21 assert not self._browser
23 options = options_for_unittests.GetCopy()
26 # TODO(jeremy): crbug.com/243912 profiles are only implemented on
28 is_running_on_desktop = not (
29 options.browser_type.startswith('android') or
30 options.browser_type.startswith('cros'))
31 if not is_running_on_desktop:
32 logging.warn("Desktop-only test, skipping.")
34 options.browser_options.profile_type = profile_type
36 if extra_browser_args:
37 options.AppendExtraBrowserArgs(extra_browser_args)
39 browser_to_create = browser_finder.FindBrowser(options)
40 if not browser_to_create:
41 raise Exception('No browser found, cannot continue test.')
42 self._browser = browser_to_create.Create()
45 self._browser.SetHTTPServerDirectories(util.GetUnittestDataDir())
53 def testBrowserCreation(self):
54 b = self.CreateBrowser()
55 self.assertEquals(1, len(b.tabs))
57 # Different browsers boot up to different things.
60 def testCommandLineOverriding(self):
61 # This test starts the browser with --user-agent=telemetry. This tests
62 # whether the user agent is then set.
63 flag1 = '--user-agent=telemetry'
64 b = self.CreateBrowser(extra_browser_args=[flag1])
66 t.Navigate(b.http_server.UrlOf('blank.html'))
67 t.WaitForDocumentReadyStateToBeInteractiveOrBetter()
68 self.assertEquals(t.EvaluateJavaScript('navigator.userAgent'),
71 def testVersionDetection(self):
72 b = self.CreateBrowser()
73 v = b._browser_backend._inspector_protocol_version # pylint: disable=W0212
74 self.assertTrue(v > 0)
76 v = b._browser_backend.chrome_branch_number # pylint: disable=W0212
77 self.assertTrue(v > 0)
79 def testNewCloseTab(self):
80 b = self.CreateBrowser()
81 if not b.supports_tab_control:
82 logging.warning('Browser does not support tab control, skipping test.')
84 existing_tab = b.tabs[0]
85 self.assertEquals(1, len(b.tabs))
86 existing_tab_url = existing_tab.url
88 new_tab = b.tabs.New()
89 self.assertEquals(2, len(b.tabs))
90 self.assertEquals(existing_tab.url, existing_tab_url)
91 self.assertEquals(new_tab.url, 'about:blank')
94 self.assertEquals(1, len(b.tabs))
95 self.assertEquals(existing_tab.url, existing_tab_url)
97 def testMultipleTabCalls(self):
98 b = self.CreateBrowser()
99 b.tabs[0].Navigate(b.http_server.UrlOf('blank.html'))
100 b.tabs[0].WaitForDocumentReadyStateToBeInteractiveOrBetter()
102 def testTabCallByReference(self):
103 b = self.CreateBrowser()
105 tab.Navigate(b.http_server.UrlOf('blank.html'))
106 b.tabs[0].WaitForDocumentReadyStateToBeInteractiveOrBetter()
108 def testCloseReferencedTab(self):
109 b = self.CreateBrowser()
110 if not b.supports_tab_control:
111 logging.warning('Browser does not support tab control, skipping test.')
115 tab.Navigate(b.http_server.UrlOf('blank.html'))
117 self.assertEquals(1, len(b.tabs))
119 def testDirtyProfileCreation(self):
120 b = self.CreateBrowser(profile_type = 'small_profile')
122 # TODO(jeremy): crbug.com/243912 profiles are only implemented on Desktop
126 self.assertEquals(1, len(b.tabs))
128 def testGetSystemInfo(self):
129 b = self.CreateBrowser()
130 if not b.supports_system_info:
132 'Browser does not support getting system info, skipping test.')
135 info = b.GetSystemInfo()
137 self.assertTrue(isinstance(info, system_info.SystemInfo))
138 self.assertTrue(hasattr(info, 'model_name'))
139 self.assertTrue(hasattr(info, 'gpu'))
140 self.assertTrue(isinstance(info.gpu, gpu_info.GPUInfo))
141 self.assertTrue(hasattr(info.gpu, 'devices'))
142 self.assertTrue(len(info.gpu.devices) > 0)
143 for g in info.gpu.devices:
144 self.assertTrue(isinstance(g, gpu_device.GPUDevice))