import logging import os import shutil import tempfile from webkitpy.benchmark_runner.browser_driver.osx_browser_driver import OSXBrowserDriver _log = logging.getLogger(__name__) test_profile_directory = os.path.join(os.path.dirname(__file__), '../data/firefox_profile/') class OSXFirefoxDriverBase(OSXBrowserDriver): app_name = None def __init__(self, *args, **kwargs): super(OSXFirefoxDriverBase, self).__init__(*args, **kwargs) self._profile_directory = None def prepare_env(self, config): super(OSXFirefoxDriverBase, self).prepare_env(config) self._setup_temporary_profile_directory() def restore_env(self): super(OSXFirefoxDriverBase, self).restore_env() self._teardown_temporary_profile_directory() def launch_url(self, url, options, browser_build_path, browser_path): # FIXME: handle self._browser_path. screen_size = self._screen_size() args_with_url = ['--args', '-width', str(int(screen_size.width)), '-height', str(int(screen_size.height))] if self._profile_directory and os.path.exists(self._profile_directory): args_with_url.extend(['--profile', self._profile_directory]) args_with_url.append(url) self._launch_process(build_dir=browser_build_path, app_name=self.app_name, url=url, args=args_with_url) def launch_driver(self, url, options, browser_build_path): from selenium import webdriver from selenium.webdriver.firefox.options import Options firefox_options = Options() self._set_firefox_binary_location(options, browser_build_path) driver_executable = self.webdriver_binary_path driver = webdriver.Firefox(firefox_options=firefox_options, executable_path=driver_executable) self._launch_webdriver(url=url, driver=driver) return driver def _setup_temporary_profile_directory(self): self._profile_directory = os.path.join(tempfile.mkdtemp(), 'firefox_profile') shutil.copytree(test_profile_directory, self._profile_directory) def _teardown_temporary_profile_directory(self): if self._profile_directory and os.path.exists(self._profile_directory): shutil.rmtree(os.path.dirname(self._profile_directory)) def _set_firefox_binary_location(self, options, browser_build_path): pass class OSXFirefoxDriver(OSXFirefoxDriverBase): process_name = 'firefox' browser_name = 'firefox' app_name = 'Firefox.app' bundle_id = 'org.mozilla.firefox' def _set_firefox_binary_location(self, options, browser_build_path): if not browser_build_path: return app_path = os.path.join(browser_build_path, self.app_name) binary_path = os.path.join(app_path, "Contents/MacOS", self.process_name) options.binary_location = binary_path class OSXFirefoxNightlyDriver(OSXFirefoxDriverBase): process_name = 'firefox' browser_name = 'firefox-nightly' app_name = 'FirefoxNightly.app' bundle_id = 'org.mozilla.firefox' def _set_firefox_binary_location(self, options, browser_build_path): if not browser_build_path: browser_build_path = '/Applications/' app_path = os.path.join(browser_build_path, self.app_name) binary_path = os.path.join(app_path, "Contents/MacOS", self.process_name) options.binary_location = binary_path