def test_manual_proxy_is_set_in_profile(self): # The setup gave us a browser but we dont need it self.driver.quit() self.profile = webdriver.FirefoxProfile() proxy = Proxy() proxy.no_proxy = 'localhost, foo.localhost' proxy.http_proxy = 'some.url:1234' proxy.ftp_proxy = None proxy.sslProxy = 'some2.url' self.profile.set_proxy(proxy) assert self.profile.default_preferences[ "network.proxy.type"] == ProxyType.MANUAL['ff_value'] assert self.profile.default_preferences[ "network.proxy.no_proxies_on"] == 'localhost, foo.localhost' assert self.profile.default_preferences[ "network.proxy.http"] == 'some.url' assert self.profile.default_preferences[ "network.proxy.http_port"] == 1234 assert self.profile.default_preferences[ "network.proxy.ssl"] == 'some2.url' assert "network.proxy.ssl_port" not in self.profile.default_preferences assert "network.proxy.ftp" not in self.profile.default_preferences
def get_capabilities(self): capabilities = DesiredCapabilities.FIREFOX.copy() # capabilities = DesiredCapabilities.CHROME.copy() # print('get_capabilities') proxy = self.profile.proxy if proxy is None or not proxy.active: # use random default proxy proxies = models.Proxy.objects.filter(active=True, default=True).all() if proxies: proxy = random.choice(proxies) else: proxy = None if proxy: # print('setting a proxy') # print(proxy) prox = Proxy() prox.proxy_type = ProxyType.MANUAL if proxy.proxy_type == proxy.HTTP: # print('HTTP proxy') prox.http_proxy = f'{proxy.ip}:{proxy.port}' prox.ssl_proxy = f'{proxy.ip}:{proxy.port}' prox.ftp_proxy = f'{proxy.ip}:{proxy.port}' elif proxy.proxy_type == proxy.SOCKS: # print('Socks proxy') prox.socks_proxy = f'{proxy.ip}:{proxy.port}' prox.socks_username = proxy.username prox.socks_password = proxy.password prox.add_to_capabilities(capabilities) # print(capabilities) return capabilities
def get_browser(PROXY): import os luminati_host = os.environ.get('LUMINATI_HOST') luminati_port = os.environ.get('LUMINATI_PORT') PROXY = 'http://' + luminati_host + ':' + luminati_port print(PROXY) proxy = Proxy() proxy.http_proxy = PROXY proxy.ftp_proxy = PROXY proxy.sslProxy = PROXY proxy.no_proxy = "localhost" #etc... ;) proxy.proxy_type = ProxyType.MANUAL capabilities = webdriver.DesiredCapabilities.CHROME proxy.add_to_capabilities(capabilities) # path = '/home/balu/balu/work/Courses/luminati+selinium/testapp/app/helper_files/chromedriver' # driver = webdriver.Chrome(executable_path = path, desired_capabilities=capabilities) driver = webdriver.Remote("http://172.20.128.1:4444/wd/hub", desired_capabilities=capabilities) url = 'https://lumtest.com/myip.json' driver.get(url) print(driver.page_source) return driver
def set_selenium_proxy(self, selenium_proxy): proxy = Proxy() proxy.http_proxy = selenium_proxy proxy.ftp_proxy = selenium_proxy proxy.sslProxy = selenium_proxy proxy.no_proxy = None proxy.proxy_type = ProxyType.MANUAL proxy.add_to_capabilities(self.capabilities) self.capabilities["acceptSslCerts"] = True
def get_proxy(proxies): print(proxies) prox = Proxy() prox.proxy_type = ProxyType.MANUAL prox.http_proxy = proxies prox.ftp_proxy = proxies prox.ssl_proxy = proxies capabilities = webdriver.DesiredCapabilities.CHROME prox.add_to_capabilities(capabilities) return capabilities
def __proxy(self): if not hasattr(self.config, 'proxy'): return None PROXY = "{}:{}".format(self.config.proxy.host, self.config.proxy.port) proxy = Proxy() proxy.http_proxy = PROXY proxy.ftp_proxy = PROXY proxy.sslProxy = PROXY proxy.no_proxy = self.config.proxy.no_proxy proxy.proxy_type = ProxyType.MANUAL proxy.autodetect = False return proxy
def test_manual_proxy_is_set_in_profile(): profile = FirefoxProfile() proxy = Proxy() proxy.no_proxy = 'localhost, foo.localhost' proxy.http_proxy = 'some.url:1234' proxy.ftp_proxy = None proxy.sslProxy = 'some2.url' profile.set_proxy(proxy) assert profile.default_preferences["network.proxy.type"] == ProxyType.MANUAL['ff_value'] assert profile.default_preferences["network.proxy.no_proxies_on"] == 'localhost, foo.localhost' assert profile.default_preferences["network.proxy.http"] == 'some.url' assert profile.default_preferences["network.proxy.http_port"] == 1234 assert profile.default_preferences["network.proxy.ssl"] == 'some2.url' assert "network.proxy.ssl_port" not in profile.default_preferences assert "network.proxy.ftp" not in profile.default_preferences
def testCanAddManualProxyToDesiredCapabilities(self): proxy = Proxy() proxy.http_proxy = self.MANUAL_PROXY["httpProxy"] proxy.ftp_proxy = self.MANUAL_PROXY["ftpProxy"] proxy.no_proxy = self.MANUAL_PROXY["noProxy"] proxy.sslProxy = self.MANUAL_PROXY["sslProxy"] proxy.socksProxy = self.MANUAL_PROXY["socksProxy"] proxy.socksUsername = self.MANUAL_PROXY["socksUsername"] proxy.socksPassword = self.MANUAL_PROXY["socksPassword"] desired_capabilities = {} proxy.add_to_capabilities(desired_capabilities) proxy_capabilities = self.MANUAL_PROXY.copy() proxy_capabilities["proxyType"] = "MANUAL" expected_capabilities = {"proxy": proxy_capabilities} self.assertEqual(expected_capabilities, desired_capabilities)
def testCanAddManualProxyToDesiredCapabilities(self): proxy = Proxy() proxy.http_proxy = self.MANUAL_PROXY['httpProxy'] proxy.ftp_proxy = self.MANUAL_PROXY['ftpProxy'] proxy.no_proxy = self.MANUAL_PROXY['noProxy'] proxy.sslProxy = self.MANUAL_PROXY['sslProxy'] proxy.socksProxy = self.MANUAL_PROXY['socksProxy'] proxy.socksUsername = self.MANUAL_PROXY['socksUsername'] proxy.socksPassword = self.MANUAL_PROXY['socksPassword'] desired_capabilities = {} proxy.add_to_capabilities(desired_capabilities) proxy_capabilities = self.MANUAL_PROXY.copy() proxy_capabilities['proxyType'] = 'MANUAL' expected_capabilities = {'proxy': proxy_capabilities} self.assertEqual(expected_capabilities, desired_capabilities)
def test_manual_proxy_is_set_in_profile(): profile = FirefoxProfile() proxy = Proxy() proxy.no_proxy = 'localhost, foo.localhost' proxy.http_proxy = 'some.url:1234' proxy.ftp_proxy = None proxy.sslProxy = 'some2.url' profile.set_proxy(proxy) assert profile.default_preferences[ "network.proxy.type"] == ProxyType.MANUAL['ff_value'] assert profile.default_preferences[ "network.proxy.no_proxies_on"] == 'localhost, foo.localhost' assert profile.default_preferences["network.proxy.http"] == 'some.url' assert profile.default_preferences["network.proxy.http_port"] == 1234 assert profile.default_preferences["network.proxy.ssl"] == 'some2.url' assert "network.proxy.ssl_port" not in profile.default_preferences assert "network.proxy.ftp" not in profile.default_preferences
def test_can_add_manual_proxy_to_desired_capabilities(): proxy = Proxy() proxy.http_proxy = MANUAL_PROXY['httpProxy'] proxy.ftp_proxy = MANUAL_PROXY['ftpProxy'] proxy.no_proxy = MANUAL_PROXY['noProxy'] proxy.sslProxy = MANUAL_PROXY['sslProxy'] proxy.socksProxy = MANUAL_PROXY['socksProxy'] proxy.socksUsername = MANUAL_PROXY['socksUsername'] proxy.socksPassword = MANUAL_PROXY['socksPassword'] proxy.socksVersion = MANUAL_PROXY['socksVersion'] desired_capabilities = {} proxy.add_to_capabilities(desired_capabilities) proxy_capabilities = MANUAL_PROXY.copy() proxy_capabilities['proxyType'] = 'MANUAL' expected_capabilities = {'proxy': proxy_capabilities} assert expected_capabilities == desired_capabilities
def get_capabilities(self): capabilities = DesiredCapabilities.FIREFOX.copy() # capabilities = DesiredCapabilities.CHROME.copy() # print('get_capabilities') proxy = self.profile.proxy if proxy: # print('setting a proxy') # print(proxy) prox = Proxy() prox.proxy_type = ProxyType.MANUAL prox.http_proxy = f'{proxy.ip}:{proxy.port}' prox.ssl_proxy = f'{proxy.ip}:{proxy.port}' prox.ftp_proxy = f'{proxy.ip}:{proxy.port}' prox.add_to_capabilities(capabilities) # print(capabilities) return capabilities
def test_manual_proxy_is_set_in_profile(self): # The setup gave us a browser but we dont need it self.driver.quit() self.profile = webdriver.FirefoxProfile() proxy = Proxy() proxy.no_proxy = 'localhost, foo.localhost' proxy.http_proxy = 'some.url:1234' proxy.ftp_proxy = None proxy.sslProxy = 'some2.url' self.profile.set_proxy(proxy) assert self.profile.default_preferences["network.proxy.type"] == ProxyType.MANUAL['ff_value'] assert self.profile.default_preferences["network.proxy.no_proxies_on"] == 'localhost, foo.localhost' assert self.profile.default_preferences["network.proxy.http"] == 'some.url' assert self.profile.default_preferences["network.proxy.http_port"] == 1234 assert self.profile.default_preferences["network.proxy.ssl"] == 'some2.url' assert "network.proxy.ssl_port" not in self.profile.default_preferences assert "network.proxy.ftp" not in self.profile.default_preferences
def getFirefoxDriver(fullproxy): try: path = 'C:\\webdrivers\\geckodriver.exe' capabilities = DesiredCapabilities.FIREFOX capabilities['marionette'] = True #capabilities['CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR'] = org.openqa.selenium.UnexpectedAlertBehaviour.ACCEPT opts = Options() #opts.set_headless() #assert opts.headless profile = webdriver.FirefoxProfile() profile.set_preference("general.useragent.override", UserAgent().random) profile.set_preference("browser.cache.disk.enable", False) profile.set_preference("browser.cache.memory.enable", False) profile.set_preference("browser.cache.offline.enable", False) profile.set_preference("network.http.use-cache", False) profile.update_preferences() if fullproxy != "": proxy = fullproxy.split(' ')[0] host = proxy.split(':')[0] port = proxy.split(':')[1] conditionalPrint("proxy used : " + proxy) prox = Proxy() socksVersion = 5 proxy = fullproxy.split(' ')[0] prox.proxy_type = ProxyType.MANUAL prox.http_proxy = proxy prox.ftp_proxy = proxy prox.ssl_proxy = proxy prox.add_to_capabilities(capabilities) driver = webdriver.Firefox(executable_path=path, capabilities=capabilities, firefox_options=opts) return driver except Exception: LogError(traceback, "fullproxy = " + fullproxy) return None
def get_ie_driver(): """ https://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#using-a-proxy https://github.com/SeleniumHQ/selenium/wiki/DesiredCapabilities#proxy-json-object 使用方式:先用正常页面不带代理的,启动多个窗口登录。登录成功后,再切换回代理。 TODO: 需要设置刷新的时候也走代理,本地模式。 服务模式不需要。 :return: """ proxy = get_proxy() driver = None if proxy: prox = Proxy() prox.proxy_type = ProxyType.MANUAL prox.http_proxy = proxy prox.socks_proxy = proxy prox.ssl_proxy = proxy prox.ftp_proxy = proxy LOGGER.info("try to use proxy: %s", proxy) caps = webdriver.DesiredCapabilities.INTERNETEXPLORER.copy() # caps['proxy'] = { # "httpProxy": proxy, # "ftpProxy": proxy, # "sslProxy": proxy, # "socks_proxy": proxy, # "noProxy": None, # "proxyType": "MANUAL", # "autodetect": False # } prox.add_to_capabilities(caps) # caps["proxy"] = {"proxyType": "manual", "httpProxy": proxy} opt = options.Options() opt.use_per_process_proxy = True driver = webdriver.Ie(capabilities=caps, options=opt) else: driver = webdriver.Ie() return driver
def testCanAddToDesiredCapabilities(self): desired_capabilities = {} proxy = Proxy() proxy.http_proxy = 'some.url:1234' proxy.ftp_proxy = 'ftp.proxy:1234' proxy.no_proxy = 'localhost, foo.localhost' proxy.sslProxy = 'ssl.proxy:1234' proxy.autodetect = 'True' proxy.add_to_capabilities(desired_capabilities) expected_capabilities = { 'proxy': { 'proxyType': 'MANUAL', 'httpProxy': 'some.url:1234', 'ftpProxy': 'ftp.proxy:1234', 'noProxy': 'localhost, foo.localhost', 'sslProxy': 'ssl.proxy:1234', 'autodetect': 'True' } } print 'descap', desired_capabilities self.assertEqual(expected_capabilities, desired_capabilities)
def open_ff_with_profile(self, app, name): """ """ if name in self._browsers: BuiltIn().log("Browser `%s` already existed" % name) return browser = 'firefox' login_url = '/' scheme = 'https' ignore_dead_node = Common.get_config_value('ignore-dead-node') app_info = Common.LOCAL['webapp'][app] device = app_info['device'] device_info = Common.GLOBAL['device'][device] ip = device_info['ip'] type = device_info['type'] template = Common.GLOBAL['access-template'][type] profile = template['profile'] auth = {} BuiltIn().log(' Using profile `%s`' % profile) auth['username'] = Common.GLOBAL['auth']['plain-text'][profile]['user'] auth['password'] = Common.GLOBAL['auth']['plain-text'][profile]['pass'] if 'login-url' in app_info and app_info['login-url']: login_url = app_info['login-url'] if 'scheme' in app_info and app_info['scheme']: scheme = app_info['scheme'] if 'browser' in app_info and app_info['browser']: browser = app_info['browser'] if 'local-storage' in app_info and app_info['local-storage']: local_storage = app_info['local-storage'] else: local_storage = None if 'login-xpath' in template: login_xpath = template['login-xpath'] # firefox options profile_dir = Common.get_result_path() + '/.%s_%s_profile' % (profile, name) if not os.path.exists(profile_dir): os.mkdir(profile_dir) os.chmod(profile_dir, 0o777) ff_opt = Options() # ff_opt.log.level = "TRACE" ff_opt.log.level = "INFO" # ff_opt.add_argument("--lang=en_US") # ff_opt.add_argument("-profile") # ff_opt.add_argument(profile_dir) # firefox profiles # ff_pf = webdriver.FirefoxProfile() ff_pf = webdriver.FirefoxProfile(profile_dir) BuiltIn().log("Open FF with profile `%s`" % ff_pf.path) if 'profile' in app_info and 'download-dir' in app_info['profile']: download_path = app_info['profile']['download-path'] else: download_path = Common.get_result_path() if 'profile' in app_info and 'auto-save-mime' in app_info['profile']: auto_save_mime = app_info['profile']['auto-save-mime'] ff_pf.set_preference("browser.helperApps.neverAsk.saveToDisk", app_info['profile']['auto-save-mime']) ff_pf.set_preference("browser.download.folderList", 2) ff_pf.set_preference("browser.download.dir", download_path) ff_pf.set_preference("browser.download.manager.showWhenStarting", False) ff_pf.set_preference("browser.download.useDownloadDir", True) ff_pf.set_preference("browser.download.panel.shown", False) ff_pf.set_preference("gfx.canvas.azure.backends", "skia") ff_pf.set_preference("gfx.content.azure.backends", "skia") ff_pf.set_preference("general.warnOnAboutConfig", False) ff_pf.set_preference("javascript.enabled", True) # lang = Common.get_config_value('web','lang','ja, en-US, en') lang = Common.get_config_value('web', 'lang', 'en-US, en') ff_pf.set_preference("intl.accept_languages", lang) # ff_pf.set_preference("font.language.group","x-western"); # ff_pf.set_preference("font.language.group","ja"); # ff_pf.set_preference("browser.cache.disk.enable",False) # ff_pf.set_preference("browser.cache.memory.enable",False) # ff_pf.set_preference("browser.cache.offline.enable",False) # ff_pf.set_preference("network.http.use-cache",False) ff_pf.native_events_enabled = True ff_pf.update_preferences() # firefox capabilities ff_cap = webdriver.DesiredCapabilities.FIREFOX ff_cap['javascriptEnabled'] = True ff_cap['webStorageEnabled'] = True if 'proxy' in app_info and app_info['proxy']: proxy = Proxy() proxy.proxy_type = ProxyType.MANUAL if 'http' in app_info['proxy']: proxy.http_proxy = app_info['proxy']['http'] if 'ssl' in app_info['proxy']: proxy.ssl_proxy = app_info['proxy']['ssl'] if 'https' in app_info['proxy']: proxy.ssl_proxy = app_info['proxy']['https'] if 'ftp' in app_info['proxy']: proxy.ftp_proxy = app_info['proxy']['ftp'] proxy.add_to_capabilities(ff_cap) # create webdriver alias = '_%s_%s' % (profile, name) self._selenium.create_webdriver( 'Firefox', alias=alias, options=ff_opt, firefox_profile=ff_pf, desired_capabilities=ff_cap, service_log_path=Common.get_result_path() + '/selenium.log') BuiltIn().log('Create a webdriver with alias `%s`' % alias) # open a browser and retry 3 times if it is necessary try: retry = 0 while retry <= 3: try: url = '%s://%s/%s' % (scheme, ip, login_url) self._selenium.go_to(url) time.sleep(5) break except WebDriverException as err: BuiltIn().log(err) BuiltIn().log( 'Will retry one more time for browser session') retry += 1 if retry == 3: raise # finally: # shutil.rmtree(fp.path,ignore_errors=True) parsed_uri = urlparse(url) self._site = '%s://%s' % (parsed_uri.scheme, parsed_uri.netloc) except Exception as err: if not ignore_dead_node: err_msg = "ERROR: Error occured when connecting to `%s`" % ( name) BuiltIn().log(err_msg) raise else: warn_msg = "WARN: Error occured when connect to `%s` but was ignored" % ( name) BuiltIn().log(warn_msg) BuiltIn().log_to_console(warn_msg) self._current_name = name browser_info = {} browser_info['url'] = url browser_info['auth'] = auth browser_info['ff_cap'] = ff_cap browser_info['ff_profile_dir'] = ff_pf.path browser_info['capture_counter'] = 0 browser_info['capture_format'] = "%s_%%010d" % app browser_info['browser'] = browser browser_info['profile'] = profile browser_info['login_url'] = login_url browser_info['local_storage'] = local_storage browser_info['login_xpath'] = login_xpath self._browsers[name] = browser_info display_info = Common.get_config_value('display') self._selenium.set_window_size(display_info['width'], display_info['height']) BuiltIn().log("Opened browser(%s) for %s app with profile `%s`" % (browser, app, ff_pf.path))
def connect(self,app,name): """ Opens a web browser and connects to application and assigns a ``name``. Extra information could be added to the ``webapp`` sections likes ``login_url``, ``browser`` or ``profile_dir``. Default values are: | browser | firefox | | login_url | / | | profile_dir | ./config/samurai.profile | """ if name in self._browsers: BuiltIn().log("Browser `%s` already existed. Reconnect to it" % name) self.close() # return login_url = '/' browser = 'firefox' profile_dir = None # collect information about the application app_info = Common.LOCAL['webapp'][app] if 'login_url' in app_info and app_info['login_url']: login_url = app_info['login_url'] if 'browser' in app_info and app_info['browser']: browser = app_info['browser'] if 'profile_dir' in app_info and app_info['profile_dir']: ff_profile_dir = os.getcwd() + 'config/' + app_info['profile_dir'] if 'proxy' in app_info and app_info['proxy']: proxy = Proxy() proxy.proxy_type = ProxyType.MANUAL if 'http' in app_info['proxy']: proxy.http_proxy = app_info['proxy']['http'] # if 'socks' in app_info['proxy']: # proxy.socks_proxy = app_info['proxy']['socks'] if 'ssl' in app_info['proxy']: proxy.ssl_proxy = app_info['proxy']['ssl'] if 'ftp' in app_info['proxy']: proxy.ftp_proxy = app_info['proxy']['ftp'] capabilities = webdriver.DesiredCapabilities.FIREFOX proxy.add_to_capabilities(capabilities) device = app_info['device'] device_info = Common.GLOBAL['device'][device] ip = device_info['ip'] type = device_info['type'] template = Common.GLOBAL['access-template'][type] profile = template['profile'] # currently, only plain-text authentication is supported # auth = {} self.auth['username'] = Common.GLOBAL['auth']['plain-text'][profile]['user'] self.auth['password'] = Common.GLOBAL['auth']['plain-text'][profile]['pass'] url = 'https://%s/%s' % (ip,login_url) ignore_dead_node = Common.get_config_value('ignore-dead-node') # open a browser try: self._driver.open_browser(url,browser,'_arbor_' + name,False,None,profile_dir) self._driver.wait_until_element_is_visible('name=username') # login self._driver.input_text('name=username', self.auth['username']) self._driver.input_text('name=password', self.auth['password']) self._driver.click_button('name=Submit') time.sleep(5) self._current_name = name self._current_app = app browser_info = {} browser_info['capture_counter'] = 0 browser_info['capture_format'] = 'arbor_%010d' browser_info['browser'] = browser self._browsers[name] = browser_info # self._driver.maximize_browser_window() BuiltIn().log("Connected to `%s` with name `%s`" % (app,name)) except Exception as err: if not ignore_dead_node: err_msg = "ERROR: Error occured when connecting to `%s`" % (name) BuiltIn().log(err_msg) raise else: warn_msg = "WARN: Error occured when connect to `%s` but was ignored" % (name) BuiltIn().log(warn_msg) BuiltIn().log_to_console(warn_msg)
def open_ff_with_profile(self, app, name): """ """ if name in self._browsers: BuiltIn().log("Browser `%s` already existed" % name) return browser = 'firefox' login_url = '/' proxy = None fp = None capabilities = None ignore_dead_node = Common.get_config_value('ignore-dead-node') # collect information about the application that listed app_info = Common.LOCAL['webapp'][app] if 'login-url' in app_info and app_info['login-url']: login_url = app_info['login-url'] if 'browser' in app_info and app_info['browser']: browser = app_info['browser'] if 'proxy' in app_info and app_info['proxy']: proxy = Proxy() proxy.proxy_type = ProxyType.MANUAL if 'http' in app_info['proxy']: proxy.http_proxy = app_info['proxy']['http'] if 'ssl' in app_info['proxy']: proxy.ssl_proxy = app_info['proxy']['ssl'] if 'ftp' in app_info['proxy']: proxy.ftp_proxy = app_info['proxy']['ftp'] capabilities = webdriver.DesiredCapabilities.FIREFOX proxy.add_to_capabilities(capabilities) device = app_info['device'] device_info = Common.GLOBAL['device'][device] ip = device_info['ip'] type = device_info['type'] template = Common.GLOBAL['access-template'][type] profile = template['profile'] auth = {} BuiltIn().log(' Using profile `%s`' % profile) auth['username'] = Common.GLOBAL['auth']['plain-text'][profile]['user'] auth['password'] = Common.GLOBAL['auth']['plain-text'][profile]['pass'] url = 'https://' + ip + '/' + login_url # create a new profile and adjust it fp = webdriver.FirefoxProfile() if 'profile' in app_info and 'download-dir' in app_info['profile']: download_path = app_info['profile']['download-path'] else: download_path = Common.get_result_path() if 'profile' in app_info and 'auto-save-mime' in app_info['profile']: auto_save_mime = app_info['profile']['auto-save-mime'] fp.set_preference("browser.helperApps.neverAsk.saveToDisk", app_info['profile']['auto-save-mime']) fp.set_preference("browser.download.folderList", 2) fp.set_preference("browser.download.dir", download_path) fp.set_preference("browser.download.manager.showWhenStarting", False) fp.set_preference("browser.download.useDownloadDir", True) fp.set_preference("browser.download.panel.shown", False) fp.set_preference("gfx.canvas.azure.backends", "cairo") fp.set_preference("gfx.content.azure.backends", "cairo") fp.update_preferences() # open a browser and retry 3 times if it is necessary try: retry = 0 while retry <= 3: try: url = 'https://' + ip + '/' + login_url self._driver.open_browser(url, browser, '_%s_%s' % (profile, name), False, capabilities, fp.path) time.sleep(5) break except WebDriverException as err: BuiltIn().log(err) BuiltIn().log( 'Will retry one more time for browser session') retry += 1 if retry == 3: raise # finally: # shutil.rmtree(fp.path,ignore_errors=True) except Exception as err: if not ignore_dead_node: err_msg = "ERROR: Error occured when connecting to `%s`" % ( name) BuiltIn().log(err_msg) raise else: warn_msg = "WARN: Error occured when connect to `%s` but was ignored" % ( name) BuiltIn().log(warn_msg) BuiltIn().log_to_console(warn_msg) self._current_name = name browser_info = {} browser_info['url'] = url browser_info['auth'] = auth browser_info['capabilities'] = capabilities browser_info['ff_profile_dir'] = fp.path browser_info['capture_counter'] = 0 browser_info['capture_format'] = "%s_%%010d" % app browser_info['browser'] = browser browser_info['profile'] = profile self._browsers[name] = browser_info BuiltIn().log("Opened browser(%s) for %s app with profile `%s`" % (browser, app, fp.path))