def run_tests(firefox_path=None): basedir = os.path.dirname(__file__) driver = None profile = FirefoxProfile() if firefox_path: if sys.platform == "darwin" and os.path.isdir(firefox_path): firefox_path = os.path.join(firefox_path, "Contents", "MacOS", "firefox") binary = FirefoxBinary(firefox_path) else: binary = None try: build1 = tempfile.NamedTemporaryFile(mode="wb", suffix=".xpi", delete=False) build2 = tempfile.NamedTemporaryFile(mode="wb", suffix=".xpi", delete=False) try: createBuild(basedir, type="gecko", outFile=build1) createBuild(os.path.join(basedir, "testhelper"), type="gecko", outFile=build2) profile.add_extension(build1.name) profile.add_extension(build2.name) finally: os.unlink(build1.name) os.unlink(build2.name) driver = WebDriver(profile, firefox_binary=binary) driver.wait_until = lambda method: WebDriverWait(driver, default_timeout).until(lambda d: method()) driver.accept_alert = Alert(driver).accept driver.keys = Keys def chain(*actions): for action in actions: c = ActionChains(driver) action(c) c.perform() driver.chain = chain max_timestamp = {"value": 0} def get_urls(): result = [] prefix = "[testhelper] Loading: " new_timestamp = max_timestamp["value"] for item in driver.get_log("browser"): timestamp = item["timestamp"] if timestamp <= max_timestamp["value"] or not item["message"].startswith(prefix): continue if timestamp > new_timestamp: new_timestamp = timestamp result.append(item["message"][len(prefix):]) max_timestamp["value"] = new_timestamp return result driver.get_urls = get_urls def close_background_tabs(): driver.execute_script(''' var event = document.createEvent("Events"); event.initEvent("testhelper_closeBackgroundTabs", true, false); document.dispatchEvent(event); ''') driver.close_background_tabs = close_background_tabs def middle_click(self): driver.execute_script(''' var event = document.createEvent("Events"); event.initEvent("testhelper_middleclick", true, false); arguments[0].dispatchEvent(event); ''', self) WebElement.middle_click = middle_click environment = { "__builtins__": __builtins__, "driver": driver, } testdir = os.path.join(basedir, "tests") for filename in os.listdir(testdir): if filename.startswith(".") or not filename.endswith(".py"): continue filepath = os.path.join(testdir, filename) environment["__file__"] = filepath with open(filepath, "rb") as handle: exec handle in environment finally: if driver: driver.quit() shutil.rmtree(profile.path, ignore_errors=True)
def run_tests(firefox_path=None): basedir = os.path.dirname(__file__) driver = None profile = FirefoxProfile() if firefox_path: if sys.platform == "darwin" and os.path.isdir(firefox_path): firefox_path = os.path.join(firefox_path, "Contents", "MacOS", "firefox") binary = FirefoxBinary(firefox_path) else: binary = None try: build1 = tempfile.NamedTemporaryFile(mode="wb", suffix=".xpi", delete=False) build2 = tempfile.NamedTemporaryFile(mode="wb", suffix=".xpi", delete=False) try: createBuild(basedir, type="gecko", outFile=build1) createBuild(os.path.join(basedir, "testhelper"), type="gecko", outFile=build2) profile.add_extension(build1.name) profile.add_extension(build2.name) finally: os.unlink(build1.name) os.unlink(build2.name) driver = WebDriver(profile, firefox_binary=binary) driver.wait_until = lambda method: WebDriverWait( driver, default_timeout).until(lambda d: method()) driver.accept_alert = Alert(driver).accept driver.keys = Keys def chain(*actions): for action in actions: c = ActionChains(driver) action(c) c.perform() driver.chain = chain max_timestamp = {"value": 0} def get_urls(): result = [] prefix = "[testhelper] Loading: " new_timestamp = max_timestamp["value"] for item in driver.get_log("browser"): timestamp = item["timestamp"] if timestamp <= max_timestamp["value"] or not item[ "message"].startswith(prefix): continue if timestamp > new_timestamp: new_timestamp = timestamp result.append(item["message"][len(prefix):]) max_timestamp["value"] = new_timestamp return result driver.get_urls = get_urls def close_background_tabs(): driver.execute_script(''' var event = document.createEvent("Events"); event.initEvent("testhelper_closeBackgroundTabs", true, false); document.dispatchEvent(event); ''') driver.close_background_tabs = close_background_tabs def middle_click(self): driver.execute_script( ''' var event = document.createEvent("Events"); event.initEvent("testhelper_middleclick", true, false); arguments[0].dispatchEvent(event); ''', self) WebElement.middle_click = middle_click environment = { "__builtins__": __builtins__, "driver": driver, } testdir = os.path.join(basedir, "tests") for filename in os.listdir(testdir): if filename.startswith(".") or not filename.endswith(".py"): continue filepath = os.path.join(testdir, filename) environment["__file__"] = filepath with open(filepath, "rb") as handle: exec handle in environment finally: if driver: driver.quit() shutil.rmtree(profile.path, ignore_errors=True)