def start_webext(): firefox_binary_path = get_firefox_binary_path() cmd_webext_run = f""" npm start -- \ --start-url '{BASE_TEST_URL}' \ --firefox '{firefox_binary_path}' """ server, thread = start_server() try: # http://stackoverflow.com/a/4417735/3104416 for line in get_command_output(cmd_webext_run, cwd=EXT_PATH): print(colorize(line.decode("utf-8")), bcolors.ENDC, end=" ") except KeyboardInterrupt: print("Keyboard Interrupt detected, shutting down...") print("\nClosing server thread...") server.shutdown() thread.join()
def start_webdriver(with_extension=True, load_browser_params=True, browser_params_file=None): """Open a webdriver instance and a server for the test pages This is meant to be imported and run manually from a python or ipython shell. A webdriver instance is returned and both the webdriver and server will automatically clean up when the shell is exited. Parameters ---------- with_extension : boolean Set to True to also load OpenWPM extension instrumentation load_browser_params : boolean Set to True to load browser_params browser_params_file : string Specify the browser_params.json to load. If None, default params from openwpm/config.py::BrowserParams will be loaded. Returns ------- webdriver A selenium webdriver instance. """ firefox_binary_path = get_firefox_binary_path() fb = FirefoxBinary(firefox_path=firefox_binary_path) server, thread = start_server() def register_cleanup(driver): driver.get(BASE_TEST_URL) def cleanup_server(): print("Cleanup before shutdown...") server.shutdown() thread.join() print("...server shutdown") driver.quit() print("...webdriver closed") shutil.rmtree(driver.capabilities["moz:profile"], ignore_errors=True) print("...browser profile removed") atexit.register(cleanup_server) return driver browser_profile_path = Path(tempfile.mkdtemp(prefix="firefox_profile_")) fo = Options() fo.add_argument("-profile") fo.add_argument(str(browser_profile_path)) if with_extension: # TODO: Restore preference for log level in a way that works in Fx 57+ # fp.set_preference("*****@*****.**", "all") configure_firefox.optimize_prefs(fo) driver = webdriver.Firefox(firefox_binary=fb, options=fo) if load_browser_params is True: # There's probably more we could do here # to set more preferences and better emulate # what happens in TaskManager. But this lets # us pass some basic things. browser_params = BrowserParams() if browser_params_file is not None: with open(browser_params_file, "r") as f: browser_params.from_json(f.read()) js_request = browser_params.js_instrument_settings js_request_as_string = jsi.clean_js_instrumentation_settings( js_request) browser_params.js_instrument_settings = js_request_as_string with open(browser_profile_path / "browser_params.json", "w") as f: f.write(browser_params.to_json()) if with_extension: # add openwpm extension to profile xpi() ext_xpi = join(EXT_PATH, "dist", "openwpm-1.0.zip") driver.install_addon(ext_xpi, temporary=True) return register_cleanup(driver)
def test_dependencies(self): firefox_binary_path = get_firefox_binary_path() assert isfile(firefox_binary_path)