Index: tools/telemetry/telemetry/core/backends/webdriver/webdriver_desktop_browser_finder.py |
diff --git a/tools/telemetry/telemetry/core/backends/webdriver/webdriver_desktop_browser_finder.py b/tools/telemetry/telemetry/core/backends/webdriver/webdriver_desktop_browser_finder.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..441c6f0c481b02ceb22c46485ef03e6dd764aa3c |
--- /dev/null |
+++ b/tools/telemetry/telemetry/core/backends/webdriver/webdriver_desktop_browser_finder.py |
@@ -0,0 +1,86 @@ |
+# Copyright (c) 2013 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+"""Finds desktop browsers that can be controlled by telemetry.""" |
+ |
+import os |
+import sys |
+ |
+from telemetry.core import browser |
+from telemetry.core import util |
+from telemetry.core import possible_browser |
+from telemetry.core import platform |
+from telemetry.core.backends.webdriver import webdriver_browser_backend |
+ |
+ |
+# Add webdriver selenium client to PYTHONPATH. |
+sys.path.insert(0, os.path.join(util.GetChromiumSrcDir(), |
+ 'third_party', 'webdriver', 'pylib')) |
+# TODO(chrisgao): Handle failure of import gracefully. crbug.com/266177 |
+from selenium import webdriver # pylint: disable=F0401 |
+ |
+ALL_BROWSER_TYPES = ','.join([ |
+ 'internet-explorer', |
+ 'internet-explorer-x64']) |
+ |
+ |
+class PossibleWebDriverBrowser(possible_browser.PossibleBrowser): |
+ """A browser that can be controlled through webdriver API.""" |
+ |
+ def __init__(self, browser_type, options): |
+ super(PossibleWebDriverBrowser, self).__init__(browser_type, options) |
+ |
+ def CreateWebDriverBackend(self): |
+ raise NotImplementedError() |
+ |
+ def Create(self): |
+ backend = self.CreateWebDriverBackend() |
+ b = browser.Browser(backend, platform.CreatePlatformBackendForCurrentOS()) |
+ return b |
+ |
+ def SupportsOptions(self, options): |
+ # TODO(chrisgao): Check if some options are not supported. |
+ return True |
+ |
+ @property |
+ def last_modification_time(self): |
+ return -1 |
+ |
+ def SelectDefaultBrowser(self, possible_browsers): # pylint: disable=W0613 |
+ return None |
+ |
+ |
+class PossibleDesktopIE(PossibleWebDriverBrowser): |
+ def __init__(self, browser_type, options, architecture): |
+ super(PossibleDesktopIE, self).__init__(browser_type, options) |
+ self._architecture = architecture |
+ |
+ def CreateWebDriverBackend(self): |
+ def DriverCreator(): |
+ # TODO(chrisgao): Check in IEDriverServer.exe and specify path to it when |
+ # creating the webdriver instance. crbug.com/266170 |
+ return webdriver.Ie() |
+ return webdriver_browser_backend.WebDriverBrowserBackend( |
+ DriverCreator, False, self.options) |
+ |
+ |
+def FindAllAvailableBrowsers(options): |
+ """Finds all the desktop browsers available on this machine.""" |
+ browsers = [] |
+ |
+ # Look for the IE browser in the standard location. |
+ if sys.platform.startswith('win'): |
+ ie_path = os.path.join('Internet Explorer', 'iexplore.exe') |
+ win_search_paths = { |
+ '32' : { 'path' : os.getenv('PROGRAMFILES(X86)'), |
+ 'type' : 'internet-explorer'}, |
+ '64' : { 'path' : os.getenv('PROGRAMFILES'), |
+ 'type' : 'internet-explorer-x64'}} |
+ for architecture, ie_info in win_search_paths.iteritems(): |
+ if not ie_info['path']: |
+ continue |
+ if os.path.exists(os.path.join(ie_info['path'], ie_path)): |
+ browsers.append( |
+ PossibleDesktopIE(ie_info['type'], options, architecture)) |
+ |
+ return browsers |