def get_driver(browser_name): ''' Spins up a new web browser and returns the driver. Tests that run with pytest spin up the browser from here. Can also be used to spin up additional browsers for the same test. ''' downloads_path = download_helper.get_downloads_folder() download_helper.reset_downloads_folder() if browser_name == constants.Browser.FIREFOX: try: profile = webdriver.FirefoxProfile() profile.set_preference("reader.parse-on-load.enabled", False) profile.set_preference("pdfjs.disabled", True) profile.set_preference( "security.mixed_content.block_active_content", False) profile.set_preference( "browser.download.manager.showAlertOnComplete", True) profile.set_preference("browser.download.panel.shown", True) profile.set_preference( "browser.download.animateNotifications", True) profile.set_preference("browser.download.dir", downloads_path) profile.set_preference("browser.download.folderList", 2) profile.set_preference( "browser.helperApps.neverAsk.saveToDisk", ("application/pdf, application/zip, application/octet-stream, " "text/csv, text/xml, application/xml, text/plain, " "text/octet-stream")) firefox_capabilities = DesiredCapabilities.FIREFOX try: # Use Geckodriver for Firefox if it's on the PATH firefox_capabilities['marionette'] = True firefox_driver = webdriver.Firefox( firefox_profile=profile, capabilities=firefox_capabilities) except WebDriverException: # Don't use Geckodriver: Only works for old versions of Firefox firefox_capabilities['marionette'] = False firefox_driver = webdriver.Firefox( firefox_profile=profile, capabilities=firefox_capabilities) return firefox_driver except: return webdriver.Firefox() if browser_name == constants.Browser.INTERNET_EXPLORER: return webdriver.Ie() if browser_name == constants.Browser.EDGE: return webdriver.Edge() if browser_name == constants.Browser.SAFARI: return webdriver.Safari() if browser_name == constants.Browser.PHANTOM_JS: return webdriver.PhantomJS() if browser_name == constants.Browser.GOOGLE_CHROME: try: chrome_options = webdriver.ChromeOptions() prefs = {"download.default_directory": downloads_path} chrome_options.add_experimental_option("prefs", prefs) chrome_options.add_argument("--allow-file-access-from-files") chrome_options.add_argument("--allow-running-insecure-content") return webdriver.Chrome(chrome_options=chrome_options) except Exception: return webdriver.Chrome()
def get_remote_driver(browser_name, headless, servername, port, proxy_string): downloads_path = download_helper.get_downloads_folder() download_helper.reset_downloads_folder() address = "http://%s:%s/wd/hub" % (servername, port) if browser_name == constants.Browser.GOOGLE_CHROME: chrome_options = _set_chrome_options(downloads_path, proxy_string) if headless: chrome_options.add_argument("--headless") capabilities = chrome_options.to_capabilities() return webdriver.Remote(command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.FIREFOX: try: # Use Geckodriver for Firefox if it's on the PATH profile = _create_firefox_profile(downloads_path, proxy_string) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = True if headless: firefox_capabilities['moz:firefoxOptions'] = ({ 'args': ['-headless'] }) capabilities = firefox_capabilities address = "http://%s:%s/wd/hub" % (servername, port) return webdriver.Remote(command_executor=address, desired_capabilities=capabilities, browser_profile=profile) except WebDriverException: # Don't use Geckodriver: Only works for old versions of Firefox profile = _create_firefox_profile(downloads_path, proxy_string) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = False if headless: firefox_capabilities['moz:firefoxOptions'] = ({ 'args': ['-headless'] }) capabilities = firefox_capabilities return webdriver.Remote(command_executor=address, desired_capabilities=capabilities, browser_profile=profile) elif browser_name == constants.Browser.INTERNET_EXPLORER: return webdriver.Remote( command_executor=address, desired_capabilities=( webdriver.DesiredCapabilities.INTERNETEXPLORER)) elif browser_name == constants.Browser.EDGE: return webdriver.Remote( command_executor=address, desired_capabilities=(webdriver.DesiredCapabilities.EDGE)) elif browser_name == constants.Browser.SAFARI: return webdriver.Remote( command_executor=address, desired_capabilities=(webdriver.DesiredCapabilities.SAFARI)) elif browser_name == constants.Browser.PHANTOM_JS: with warnings.catch_warnings(): # Ignore "PhantomJS has been deprecated" UserWarning warnings.simplefilter("ignore", category=UserWarning) return webdriver.Remote( command_executor=address, desired_capabilities=(webdriver.DesiredCapabilities.PHANTOMJS))
def get_local_driver(browser_name, headless, proxy_string): ''' Spins up a new web browser and returns the driver. Can also be used to spin up additional browsers for the same test. ''' downloads_path = download_helper.get_downloads_folder() download_helper.reset_downloads_folder() if browser_name == constants.Browser.FIREFOX: try: try: # Use Geckodriver for Firefox if it's on the PATH profile = _create_firefox_profile(downloads_path, proxy_string) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = True options = webdriver.FirefoxOptions() if headless: options.add_argument('-headless') firefox_driver = webdriver.Firefox( firefox_profile=profile, capabilities=firefox_capabilities, firefox_options=options) except WebDriverException: # Don't use Geckodriver: Only works for old versions of Firefox profile = _create_firefox_profile(downloads_path, proxy_string) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = False firefox_driver = webdriver.Firefox( firefox_profile=profile, capabilities=firefox_capabilities) return firefox_driver except Exception as e: if headless: raise Exception(e) return webdriver.Firefox() elif browser_name == constants.Browser.INTERNET_EXPLORER: return webdriver.Ie() elif browser_name == constants.Browser.EDGE: return webdriver.Edge() elif browser_name == constants.Browser.SAFARI: return webdriver.Safari() elif browser_name == constants.Browser.PHANTOM_JS: with warnings.catch_warnings(): # Ignore "PhantomJS has been deprecated" UserWarning warnings.simplefilter("ignore", category=UserWarning) return webdriver.PhantomJS() elif browser_name == constants.Browser.GOOGLE_CHROME: try: chrome_options = _set_chrome_options(downloads_path, proxy_string) if headless: chrome_options.add_argument("--headless") return webdriver.Chrome(options=chrome_options) except Exception as e: if headless: raise Exception(e) return webdriver.Chrome()
def get_driver(browser_name): ''' Spins up a new web browser and returns the driver. Tests that run with pytest spin up the browser from here. Can also be used to spin up additional browsers for the same test. ''' downloads_path = download_helper.get_downloads_folder() download_helper.reset_downloads_folder() if browser_name == constants.Browser.FIREFOX: try: try: # Use Geckodriver for Firefox if it's on the PATH profile = _create_firefox_profile(downloads_path) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = True firefox_driver = webdriver.Firefox( firefox_profile=profile, capabilities=firefox_capabilities) except WebDriverException: # Don't use Geckodriver: Only works for old versions of Firefox profile = _create_firefox_profile(downloads_path) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = False firefox_driver = webdriver.Firefox( firefox_profile=profile, capabilities=firefox_capabilities) return firefox_driver except: return webdriver.Firefox() if browser_name == constants.Browser.INTERNET_EXPLORER: return webdriver.Ie() if browser_name == constants.Browser.EDGE: return webdriver.Edge() if browser_name == constants.Browser.SAFARI: return webdriver.Safari() if browser_name == constants.Browser.PHANTOM_JS: return webdriver.PhantomJS() if browser_name == constants.Browser.GOOGLE_CHROME: try: chrome_options = webdriver.ChromeOptions() prefs = { "download.default_directory": downloads_path, "credentials_enable_service": False, "profile": { "password_manager_enabled": False } } chrome_options.add_experimental_option("prefs", prefs) chrome_options.add_argument("--allow-file-access-from-files") chrome_options.add_argument("--allow-running-insecure-content") return webdriver.Chrome(chrome_options=chrome_options) except Exception: return webdriver.Chrome()
def get_driver(browser_name): ''' Spins up a new web browser and returns the driver. Tests that run with pytest spin up the browser from here. Can also be used to spin up additional browsers for the same test. ''' downloads_path = download_helper.get_downloads_folder() download_helper.reset_downloads_folder() if browser_name == constants.Browser.FIREFOX: try: profile = webdriver.FirefoxProfile() profile.set_preference("reader.parse-on-load.enabled", False) profile.set_preference("pdfjs.disabled", True) profile.set_preference( "browser.download.manager.showAlertOnComplete", True) profile.set_preference("browser.download.panel.shown", True) profile.set_preference( "browser.download.animateNotifications", True) profile.set_preference("browser.download.dir", downloads_path) profile.set_preference("browser.download.folderList", 2) profile.set_preference( "browser.helperApps.neverAsk.saveToDisk", ("application/pdf, application/zip, application/octet-stream, " "text/csv, text/xml, application/xml, text/plain, " "text/octet-stream")) return webdriver.Firefox(profile) except: return webdriver.Firefox() if browser_name == constants.Browser.INTERNET_EXPLORER: return webdriver.Ie() if browser_name == constants.Browser.EDGE: return webdriver.Edge() if browser_name == constants.Browser.SAFARI: return webdriver.Safari() if browser_name == constants.Browser.PHANTOM_JS: return webdriver.PhantomJS() if browser_name == constants.Browser.GOOGLE_CHROME: try: chrome_options = webdriver.ChromeOptions() prefs = {"download.default_directory": downloads_path} chrome_options.add_experimental_option("prefs", prefs) chrome_options.add_argument("--allow-file-access-from-files") return webdriver.Chrome(chrome_options=chrome_options) except Exception: return webdriver.Chrome()
def get_driver(browser_name): ''' Spins up a new web browser and returns the driver. Tests that run with pytest spin up the browser from here. Can also be used to spin up additional browsers for the same test. ''' downloads_path = download_helper.get_downloads_folder() download_helper.reset_downloads_folder() if browser_name == constants.Browser.FIREFOX: try: try: # Use Geckodriver for Firefox if it's on the PATH profile = _create_firefox_profile(downloads_path) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = True firefox_driver = webdriver.Firefox( firefox_profile=profile, capabilities=firefox_capabilities) except WebDriverException: # Don't use Geckodriver: Only works for old versions of Firefox profile = _create_firefox_profile(downloads_path) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = False firefox_driver = webdriver.Firefox( firefox_profile=profile, capabilities=firefox_capabilities) return firefox_driver except: return webdriver.Firefox() if browser_name == constants.Browser.INTERNET_EXPLORER: return webdriver.Ie() if browser_name == constants.Browser.EDGE: return webdriver.Edge() if browser_name == constants.Browser.SAFARI: return webdriver.Safari() if browser_name == constants.Browser.PHANTOM_JS: return webdriver.PhantomJS() if browser_name == constants.Browser.GOOGLE_CHROME: try: chrome_options = webdriver.ChromeOptions() prefs = {"download.default_directory": downloads_path} chrome_options.add_experimental_option("prefs", prefs) chrome_options.add_argument("--allow-file-access-from-files") chrome_options.add_argument("--allow-running-insecure-content") return webdriver.Chrome(chrome_options=chrome_options) except Exception: return webdriver.Chrome()
def get_local_driver(browser_name, headless, servername, proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent, disable_csp, enable_sync, no_sandbox, disable_gpu, incognito, guest_mode, devtools, user_data_dir, extension_zip, extension_dir, mobile_emulator, device_width, device_height, device_pixel_ratio): ''' Spins up a new web browser and returns the driver. Can also be used to spin up additional browsers for the same test. ''' downloads_path = download_helper.get_downloads_folder() download_helper.reset_downloads_folder() if browser_name == constants.Browser.FIREFOX: try: try: # Use Geckodriver for Firefox if it's on the PATH profile = _create_firefox_profile(downloads_path, proxy_string, user_agent, disable_csp) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = True options = webdriver.FirefoxOptions() if headless: options.add_argument('-headless') firefox_capabilities['moz:firefoxOptions'] = ({ 'args': ['-headless'] }) if LOCAL_GECKODRIVER and os.path.exists(LOCAL_GECKODRIVER): try: make_driver_executable_if_not(LOCAL_GECKODRIVER) except Exception as e: logging.debug("\nWarning: Could not make geckodriver" " executable: %s" % e) elif not is_geckodriver_on_path(): args = " ".join(sys.argv) if not ("-n" in sys.argv or "-n=" in args or args == "-c"): # (Not multithreaded) from seleniumbase.console_scripts import sb_install sys_args = sys.argv # Save a copy of current sys args print("\nWarning: geckodriver not found!" " Installing now:") try: sb_install.main(override="geckodriver") except Exception as e: print("\nWarning: Could not install geckodriver: " "%s" % e) sys.argv = sys_args # Put back the original sys args if "linux" in PLATFORM or not headless: firefox_driver = webdriver.Firefox( firefox_profile=profile, capabilities=firefox_capabilities) else: firefox_driver = webdriver.Firefox( firefox_profile=profile, capabilities=firefox_capabilities, options=options) except Exception: profile = _create_firefox_profile(downloads_path, proxy_string, user_agent, disable_csp) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_driver = webdriver.Firefox( firefox_profile=profile, capabilities=firefox_capabilities) return firefox_driver except Exception as e: if headless: raise Exception(e) return webdriver.Firefox() elif browser_name == constants.Browser.INTERNET_EXPLORER: if not IS_WINDOWS: raise Exception( "IE Browser is for Windows-based operating systems only!") from selenium.webdriver.ie.options import Options ie_options = Options() ie_options.ignore_protected_mode_settings = False ie_options.ignore_zoom_level = True ie_options.require_window_focus = False ie_options.native_events = True ie_options.full_page_screenshot = True ie_options.persistent_hover = True ie_capabilities = ie_options.to_capabilities() if LOCAL_IEDRIVER and os.path.exists(LOCAL_IEDRIVER): try: make_driver_executable_if_not(LOCAL_IEDRIVER) except Exception as e: logging.debug("\nWarning: Could not make iedriver" " executable: %s" % e) return webdriver.Ie(capabilities=ie_capabilities) elif browser_name == constants.Browser.EDGE: try: chrome_options = _set_chrome_options( downloads_path, headless, proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent, disable_csp, enable_sync, no_sandbox, disable_gpu, incognito, guest_mode, devtools, user_data_dir, extension_zip, extension_dir, servername, mobile_emulator, device_width, device_height, device_pixel_ratio) if LOCAL_EDGEDRIVER and os.path.exists(LOCAL_EDGEDRIVER): try: make_driver_executable_if_not(LOCAL_EDGEDRIVER) except Exception as e: logging.debug("\nWarning: Could not make edgedriver" " executable: %s" % e) elif not is_edgedriver_on_path(): args = " ".join(sys.argv) if not ("-n" in sys.argv or "-n=" in args or args == "-c"): # (Not multithreaded) from seleniumbase.console_scripts import sb_install sys_args = sys.argv # Save a copy of current sys args print("\nWarning: msedgedriver not found. Installing now:") sb_install.main(override="edgedriver") sys.argv = sys_args # Put back the original sys args return webdriver.Chrome(executable_path=LOCAL_EDGEDRIVER, options=chrome_options) except Exception as e: if headless: raise Exception(e) if LOCAL_EDGEDRIVER and os.path.exists(LOCAL_EDGEDRIVER): try: make_driver_executable_if_not(LOCAL_EDGEDRIVER) except Exception as e: logging.debug("\nWarning: Could not make edgedriver" " executable: %s" % e) return webdriver.Chrome(executable_path=LOCAL_EDGEDRIVER) elif browser_name == constants.Browser.SAFARI: arg_join = " ".join(sys.argv) if ("-n" in sys.argv) or ("-n=" in arg_join) or (arg_join == "-c"): # Skip if multithreaded raise Exception("Can't run Safari tests in multi-threaded mode!") return webdriver.Safari() elif browser_name == constants.Browser.OPERA: if LOCAL_OPERADRIVER and os.path.exists(LOCAL_OPERADRIVER): try: make_driver_executable_if_not(LOCAL_OPERADRIVER) except Exception as e: logging.debug("\nWarning: Could not make operadriver" " executable: %s" % e) return webdriver.Opera() elif browser_name == constants.Browser.PHANTOM_JS: with warnings.catch_warnings(): # Ignore "PhantomJS has been deprecated" UserWarning warnings.simplefilter("ignore", category=UserWarning) return webdriver.PhantomJS() elif browser_name == constants.Browser.GOOGLE_CHROME: try: chrome_options = _set_chrome_options( downloads_path, headless, proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent, disable_csp, enable_sync, no_sandbox, disable_gpu, incognito, guest_mode, devtools, user_data_dir, extension_zip, extension_dir, servername, mobile_emulator, device_width, device_height, device_pixel_ratio) if LOCAL_CHROMEDRIVER and os.path.exists(LOCAL_CHROMEDRIVER): try: make_driver_executable_if_not(LOCAL_CHROMEDRIVER) except Exception as e: logging.debug("\nWarning: Could not make chromedriver" " executable: %s" % e) elif not is_chromedriver_on_path(): args = " ".join(sys.argv) if not ("-n" in sys.argv or "-n=" in args or args == "-c"): # (Not multithreaded) from seleniumbase.console_scripts import sb_install sys_args = sys.argv # Save a copy of current sys args print("\nWarning: chromedriver not found. Installing now:") sb_install.main(override="chromedriver") sys.argv = sys_args # Put back the original sys args return webdriver.Chrome(options=chrome_options) except Exception as e: if headless: raise Exception(e) if LOCAL_CHROMEDRIVER and os.path.exists(LOCAL_CHROMEDRIVER): try: make_driver_executable_if_not(LOCAL_CHROMEDRIVER) except Exception as e: logging.debug("\nWarning: Could not make chromedriver" " executable: %s" % e) return webdriver.Chrome() else: raise Exception("%s is not a valid browser option for this system!" % browser_name)
def get_remote_driver(browser_name, headless, servername, port, proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent, cap_file, disable_csp, enable_sync, no_sandbox, disable_gpu, incognito, guest_mode, devtools, user_data_dir, extension_zip, extension_dir, mobile_emulator, device_width, device_height, device_pixel_ratio): downloads_path = download_helper.get_downloads_folder() download_helper.reset_downloads_folder() address = "http://%s:%s/wd/hub" % (servername, port) desired_caps = {} if cap_file: desired_caps = capabilities_parser.get_desired_capabilities(cap_file) if browser_name == constants.Browser.GOOGLE_CHROME: chrome_options = _set_chrome_options( downloads_path, headless, proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent, disable_csp, enable_sync, no_sandbox, disable_gpu, incognito, guest_mode, devtools, user_data_dir, extension_zip, extension_dir, servername, mobile_emulator, device_width, device_height, device_pixel_ratio) capabilities = chrome_options.to_capabilities() for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote(command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.FIREFOX: try: # Use Geckodriver for Firefox if it's on the PATH profile = _create_firefox_profile(downloads_path, proxy_string, user_agent, disable_csp) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = True if headless: firefox_capabilities['moz:firefoxOptions'] = ({ 'args': ['-headless'] }) for key in desired_caps.keys(): firefox_capabilities[key] = desired_caps[key] capabilities = firefox_capabilities warnings.simplefilter("ignore", category=DeprecationWarning) return webdriver.Remote(command_executor=address, desired_capabilities=capabilities, browser_profile=profile) except WebDriverException: # Don't use Geckodriver: Only works for old versions of Firefox profile = _create_firefox_profile(downloads_path, proxy_string, user_agent, disable_csp) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = False if headless: firefox_capabilities['moz:firefoxOptions'] = ({ 'args': ['-headless'] }) for key in desired_caps.keys(): firefox_capabilities[key] = desired_caps[key] capabilities = firefox_capabilities return webdriver.Remote(command_executor=address, desired_capabilities=capabilities, browser_profile=profile) elif browser_name == constants.Browser.INTERNET_EXPLORER: capabilities = webdriver.DesiredCapabilities.INTERNETEXPLORER for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote(command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.EDGE: capabilities = webdriver.DesiredCapabilities.EDGE for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote(command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.SAFARI: capabilities = webdriver.DesiredCapabilities.SAFARI for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote(command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.OPERA: capabilities = webdriver.DesiredCapabilities.OPERA for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote(command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.PHANTOM_JS: capabilities = webdriver.DesiredCapabilities.PHANTOMJS for key in desired_caps.keys(): capabilities[key] = desired_caps[key] with warnings.catch_warnings(): # Ignore "PhantomJS has been deprecated" UserWarning warnings.simplefilter("ignore", category=UserWarning) return webdriver.Remote(command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.ANDROID: capabilities = webdriver.DesiredCapabilities.ANDROID for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote(command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.IPHONE: capabilities = webdriver.DesiredCapabilities.IPHONE for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote(command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.IPAD: capabilities = webdriver.DesiredCapabilities.IPAD for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote(command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.REMOTE: return webdriver.Remote(command_executor=address, desired_capabilities=desired_caps)
def get_local_driver( browser_name, headless, locale_code, servername, proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent, disable_csp, enable_ws, enable_sync, use_auto_ext, no_sandbox, disable_gpu, incognito, guest_mode, devtools, swiftshader, block_images, user_data_dir, extension_zip, extension_dir, mobile_emulator, device_width, device_height, device_pixel_ratio): ''' Spins up a new web browser and returns the driver. Can also be used to spin up additional browsers for the same test. ''' downloads_path = download_helper.get_downloads_folder() download_helper.reset_downloads_folder() if browser_name == constants.Browser.FIREFOX: try: try: # Use Geckodriver for Firefox if it's on the PATH profile = _create_firefox_profile( downloads_path, locale_code, proxy_string, user_agent, disable_csp) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = True options = webdriver.FirefoxOptions() if headless: options.add_argument('-headless') firefox_capabilities['moz:firefoxOptions'] = ( {'args': ['-headless']}) if LOCAL_GECKODRIVER and os.path.exists(LOCAL_GECKODRIVER): try: make_driver_executable_if_not(LOCAL_GECKODRIVER) except Exception as e: logging.debug("\nWarning: Could not make geckodriver" " executable: %s" % e) elif not is_geckodriver_on_path(): args = " ".join(sys.argv) if not ("-n" in sys.argv or "-n=" in args or args == "-c"): # (Not multithreaded) from seleniumbase.console_scripts import sb_install sys_args = sys.argv # Save a copy of current sys args print("\nWarning: geckodriver not found!" " Installing now:") try: sb_install.main(override="geckodriver") except Exception as e: print("\nWarning: Could not install geckodriver: " "%s" % e) sys.argv = sys_args # Put back the original sys args if "linux" in PLATFORM or not headless: firefox_driver = webdriver.Firefox( firefox_profile=profile, capabilities=firefox_capabilities) else: firefox_driver = webdriver.Firefox( firefox_profile=profile, capabilities=firefox_capabilities, options=options) except Exception: profile = _create_firefox_profile( downloads_path, locale_code, proxy_string, user_agent, disable_csp) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_driver = webdriver.Firefox( firefox_profile=profile, capabilities=firefox_capabilities) return firefox_driver except Exception as e: if headless: raise Exception(e) return webdriver.Firefox() elif browser_name == constants.Browser.INTERNET_EXPLORER: if not IS_WINDOWS: raise Exception( "IE Browser is for Windows-based operating systems only!") from selenium.webdriver.ie.options import Options ie_options = Options() ie_options.ignore_protected_mode_settings = False ie_options.ignore_zoom_level = True ie_options.require_window_focus = False ie_options.native_events = True ie_options.full_page_screenshot = True ie_options.persistent_hover = True ie_capabilities = ie_options.to_capabilities() if LOCAL_IEDRIVER and os.path.exists(LOCAL_IEDRIVER): try: make_driver_executable_if_not(LOCAL_IEDRIVER) except Exception as e: logging.debug("\nWarning: Could not make iedriver" " executable: %s" % e) return webdriver.Ie(capabilities=ie_capabilities) elif browser_name == constants.Browser.EDGE: try: chrome_options = _set_chrome_options( browser_name, downloads_path, headless, locale_code, proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent, disable_csp, enable_ws, enable_sync, use_auto_ext, no_sandbox, disable_gpu, incognito, guest_mode, devtools, swiftshader, block_images, user_data_dir, extension_zip, extension_dir, servername, mobile_emulator, device_width, device_height, device_pixel_ratio) if LOCAL_EDGEDRIVER and os.path.exists(LOCAL_EDGEDRIVER): try: make_driver_executable_if_not(LOCAL_EDGEDRIVER) except Exception as e: logging.debug("\nWarning: Could not make edgedriver" " executable: %s" % e) elif not is_edgedriver_on_path(): args = " ".join(sys.argv) if not ("-n" in sys.argv or "-n=" in args or args == "-c"): # (Not multithreaded) from seleniumbase.console_scripts import sb_install sys_args = sys.argv # Save a copy of current sys args print("\nWarning: msedgedriver not found. Installing now:") sb_install.main(override="edgedriver") sys.argv = sys_args # Put back the original sys args # For Microsoft Edge (Chromium) version 79 or lower return webdriver.Chrome(executable_path=LOCAL_EDGEDRIVER, options=chrome_options) except Exception: # For Microsoft Edge (Chromium) version 80 or higher from msedge.selenium_tools import Edge, EdgeOptions if LOCAL_EDGEDRIVER and os.path.exists(LOCAL_EDGEDRIVER): try: make_driver_executable_if_not(LOCAL_EDGEDRIVER) except Exception as e: logging.debug("\nWarning: Could not make edgedriver" " executable: %s" % e) edge_options = EdgeOptions() edge_options.use_chromium = True prefs = { "download.default_directory": downloads_path, "local_discovery.notifications_enabled": False, "credentials_enable_service": False, "download.prompt_for_download": False, "download.directory_upgrade": True, "safebrowsing.enabled": False, "safebrowsing.disable_download_protection": True, "profile": { "password_manager_enabled": False, "default_content_setting_values.automatic_downloads": 1, "managed_default_content_settings.automatic_downloads": 1, "default_content_settings.popups": 0, "managed_default_content_settings.popups": 0 } } if locale_code: prefs["intl.accept_languages"] = locale_code if block_images: prefs["profile.managed_default_content_settings.images"] = 2 edge_options.add_experimental_option("prefs", prefs) edge_options.add_experimental_option("w3c", True) edge_options.add_experimental_option( "useAutomationExtension", False) edge_options.add_experimental_option( "excludeSwitches", ["enable-automation", "enable-logging"]) if guest_mode: edge_options.add_argument("--guest") if headless: edge_options.add_argument("--headless") if mobile_emulator: emulator_settings = {} device_metrics = {} if type(device_width) is int and ( type(device_height) is int and ( type(device_pixel_ratio) is int)): device_metrics["width"] = device_width device_metrics["height"] = device_height device_metrics["pixelRatio"] = device_pixel_ratio else: device_metrics["width"] = 411 device_metrics["height"] = 731 device_metrics["pixelRatio"] = 3 emulator_settings["deviceMetrics"] = device_metrics if user_agent: emulator_settings["userAgent"] = user_agent edge_options.add_experimental_option( "mobileEmulation", emulator_settings) edge_options.add_argument("--enable-sync") edge_options.add_argument("--disable-infobars") edge_options.add_argument("--disable-save-password-bubble") edge_options.add_argument("--disable-single-click-autofill") edge_options.add_argument( "--disable-autofill-keyboard-accessory-view[8]") edge_options.add_argument("--disable-translate") if not enable_ws: edge_options.add_argument("--disable-web-security") edge_options.add_argument("--homepage=about:blank") edge_options.add_argument("--dns-prefetch-disable") edge_options.add_argument("--dom-automation") edge_options.add_argument("--disable-hang-monitor") edge_options.add_argument("--disable-prompt-on-repost") if proxy_string: edge_options.add_argument('--proxy-server=%s' % proxy_string) edge_options.add_argument("--test-type") edge_options.add_argument("--log-level=3") edge_options.add_argument("--no-first-run") edge_options.add_argument("--ignore-certificate-errors") if devtools and not headless: edge_options.add_argument("--auto-open-devtools-for-tabs") edge_options.add_argument("--allow-file-access-from-files") edge_options.add_argument("--allow-insecure-localhost") edge_options.add_argument("--allow-running-insecure-content") if user_agent: edge_options.add_argument("--user-agent=%s" % user_agent) edge_options.add_argument("--no-sandbox") if swiftshader: edge_options.add_argument("--use-gl=swiftshader") else: edge_options.add_argument("--disable-gpu") if "linux" in PLATFORM: edge_options.add_argument("--disable-dev-shm-usage") capabilities = edge_options.to_capabilities() capabilities["platform"] = '' return Edge( executable_path=LOCAL_EDGEDRIVER, capabilities=capabilities) elif browser_name == constants.Browser.SAFARI: arg_join = " ".join(sys.argv) if ("-n" in sys.argv) or ("-n=" in arg_join) or (arg_join == "-c"): # Skip if multithreaded raise Exception("Can't run Safari tests in multi-threaded mode!") safari_capabilities = _set_safari_capabilities() return webdriver.Safari(desired_capabilities=safari_capabilities) elif browser_name == constants.Browser.OPERA: try: if LOCAL_OPERADRIVER and os.path.exists(LOCAL_OPERADRIVER): try: make_driver_executable_if_not(LOCAL_OPERADRIVER) except Exception as e: logging.debug("\nWarning: Could not make operadriver" " executable: %s" % e) opera_options = _set_chrome_options( browser_name, downloads_path, headless, locale_code, proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent, disable_csp, enable_ws, enable_sync, use_auto_ext, no_sandbox, disable_gpu, incognito, guest_mode, devtools, swiftshader, block_images, user_data_dir, extension_zip, extension_dir, servername, mobile_emulator, device_width, device_height, device_pixel_ratio) opera_options.headless = False # No support for headless Opera return webdriver.Opera(options=opera_options) except Exception: return webdriver.Opera() elif browser_name == constants.Browser.PHANTOM_JS: with warnings.catch_warnings(): # Ignore "PhantomJS has been deprecated" UserWarning warnings.simplefilter("ignore", category=UserWarning) return webdriver.PhantomJS() elif browser_name == constants.Browser.GOOGLE_CHROME: try: chrome_options = _set_chrome_options( browser_name, downloads_path, headless, locale_code, proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent, disable_csp, enable_ws, enable_sync, use_auto_ext, no_sandbox, disable_gpu, incognito, guest_mode, devtools, swiftshader, block_images, user_data_dir, extension_zip, extension_dir, servername, mobile_emulator, device_width, device_height, device_pixel_ratio) if LOCAL_CHROMEDRIVER and os.path.exists(LOCAL_CHROMEDRIVER): try: make_driver_executable_if_not(LOCAL_CHROMEDRIVER) except Exception as e: logging.debug("\nWarning: Could not make chromedriver" " executable: %s" % e) elif not is_chromedriver_on_path(): args = " ".join(sys.argv) if not ("-n" in sys.argv or "-n=" in args or args == "-c"): # (Not multithreaded) from seleniumbase.console_scripts import sb_install sys_args = sys.argv # Save a copy of current sys args print("\nWarning: chromedriver not found. Installing now:") sb_install.main(override="chromedriver") sys.argv = sys_args # Put back the original sys args if not headless or "linux" not in PLATFORM: return webdriver.Chrome(options=chrome_options) else: # Running headless on Linux try: return webdriver.Chrome(options=chrome_options) except Exception: # Use the virtual display on Linux during headless errors logging.debug("\nWarning: Chrome failed to launch in" " headless mode. Attempting to use the" " SeleniumBase virtual display on Linux...") chrome_options.headless = False return webdriver.Chrome(options=chrome_options) except Exception as e: if headless: raise Exception(e) if LOCAL_CHROMEDRIVER and os.path.exists(LOCAL_CHROMEDRIVER): try: make_driver_executable_if_not(LOCAL_CHROMEDRIVER) except Exception as e: logging.debug("\nWarning: Could not make chromedriver" " executable: %s" % e) return webdriver.Chrome() else: raise Exception( "%s is not a valid browser option for this system!" % browser_name)
def get_remote_driver( browser_name, headless, locale_code, servername, port, proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent, cap_file, cap_string, disable_csp, enable_ws, enable_sync, use_auto_ext, no_sandbox, disable_gpu, incognito, guest_mode, devtools, swiftshader, block_images, user_data_dir, extension_zip, extension_dir, test_id, mobile_emulator, device_width, device_height, device_pixel_ratio): downloads_path = download_helper.get_downloads_folder() download_helper.reset_downloads_folder() address = "http://%s:%s/wd/hub" % (servername, port) desired_caps = {} extra_caps = {} if cap_file: from seleniumbase.core import capabilities_parser desired_caps = capabilities_parser.get_desired_capabilities(cap_file) if cap_string: try: extra_caps = json.loads(cap_string) except Exception as e: p1 = "Invalid input format for --cap-string:\n %s" % e p2 = "The --cap-string input was: %s" % cap_string p3 = "Enclose cap-string in SINGLE quotes; keys in DOUBLE quotes." p4 = ("""Here's an example of correct cap-string usage:\n """ """--cap-string='{"browserName":"chrome","name":"test1"}'""") raise Exception("%s\n%s\n%s\n%s" % (p1, p2, p3, p4)) for cap_key in extra_caps.keys(): desired_caps[cap_key] = extra_caps[cap_key] if cap_file or cap_string: if "name" in desired_caps.keys(): if desired_caps["name"] == "*": desired_caps["name"] = test_id if browser_name == constants.Browser.GOOGLE_CHROME: chrome_options = _set_chrome_options( browser_name, downloads_path, headless, locale_code, proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent, disable_csp, enable_ws, enable_sync, use_auto_ext, no_sandbox, disable_gpu, incognito, guest_mode, devtools, swiftshader, block_images, user_data_dir, extension_zip, extension_dir, servername, mobile_emulator, device_width, device_height, device_pixel_ratio) capabilities = chrome_options.to_capabilities() for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote( command_executor=address, desired_capabilities=capabilities, keep_alive=True) elif browser_name == constants.Browser.FIREFOX: try: # Use Geckodriver for Firefox if it's on the PATH profile = _create_firefox_profile( downloads_path, locale_code, proxy_string, user_agent, disable_csp) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = True if headless: firefox_capabilities['moz:firefoxOptions'] = ( {'args': ['-headless']}) for key in desired_caps.keys(): firefox_capabilities[key] = desired_caps[key] capabilities = firefox_capabilities warnings.simplefilter("ignore", category=DeprecationWarning) return webdriver.Remote( command_executor=address, desired_capabilities=capabilities, browser_profile=profile, keep_alive=True) except WebDriverException: # Don't use Geckodriver: Only works for old versions of Firefox profile = _create_firefox_profile( downloads_path, locale_code, proxy_string, user_agent, disable_csp) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = False if headless: firefox_capabilities['moz:firefoxOptions'] = ( {'args': ['-headless']}) for key in desired_caps.keys(): firefox_capabilities[key] = desired_caps[key] capabilities = firefox_capabilities return webdriver.Remote( command_executor=address, desired_capabilities=capabilities, browser_profile=profile, keep_alive=True) elif browser_name == constants.Browser.INTERNET_EXPLORER: capabilities = webdriver.DesiredCapabilities.INTERNETEXPLORER for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote( command_executor=address, desired_capabilities=capabilities, keep_alive=True) elif browser_name == constants.Browser.EDGE: capabilities = webdriver.DesiredCapabilities.EDGE for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote( command_executor=address, desired_capabilities=capabilities, keep_alive=True) elif browser_name == constants.Browser.SAFARI: capabilities = webdriver.DesiredCapabilities.SAFARI for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote( command_executor=address, desired_capabilities=capabilities, keep_alive=True) elif browser_name == constants.Browser.OPERA: capabilities = webdriver.DesiredCapabilities.OPERA for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote( command_executor=address, desired_capabilities=capabilities, keep_alive=True) elif browser_name == constants.Browser.PHANTOM_JS: capabilities = webdriver.DesiredCapabilities.PHANTOMJS for key in desired_caps.keys(): capabilities[key] = desired_caps[key] with warnings.catch_warnings(): # Ignore "PhantomJS has been deprecated" UserWarning warnings.simplefilter("ignore", category=UserWarning) return webdriver.Remote( command_executor=address, desired_capabilities=capabilities, keep_alive=True) elif browser_name == constants.Browser.ANDROID: capabilities = webdriver.DesiredCapabilities.ANDROID for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote( command_executor=address, desired_capabilities=capabilities, keep_alive=True) elif browser_name == constants.Browser.IPHONE: capabilities = webdriver.DesiredCapabilities.IPHONE for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote( command_executor=address, desired_capabilities=capabilities, keep_alive=True) elif browser_name == constants.Browser.IPAD: capabilities = webdriver.DesiredCapabilities.IPAD for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote( command_executor=address, desired_capabilities=capabilities, keep_alive=True) elif browser_name == constants.Browser.REMOTE: return webdriver.Remote( command_executor=address, desired_capabilities=desired_caps, keep_alive=True)
def get_local_driver(browser_name, headless, proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent, disable_csp, enable_sync, user_data_dir, extension_zip, extension_dir, mobile_emulator, device_width, device_height, device_pixel_ratio): ''' Spins up a new web browser and returns the driver. Can also be used to spin up additional browsers for the same test. ''' downloads_path = download_helper.get_downloads_folder() download_helper.reset_downloads_folder() if browser_name == constants.Browser.FIREFOX: try: try: # Use Geckodriver for Firefox if it's on the PATH profile = _create_firefox_profile(downloads_path, proxy_string, user_agent, disable_csp) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = True options = webdriver.FirefoxOptions() if headless: options.add_argument('-headless') if LOCAL_GECKODRIVER and os.path.exists(LOCAL_GECKODRIVER): make_driver_executable_if_not(LOCAL_GECKODRIVER) elif not is_geckodriver_on_path(): if not "".join(sys.argv) == "-c": # Skip if multithreaded from seleniumbase.console_scripts import sb_install sys_args = sys.argv # Save a copy of current sys args print("\nWarning: geckodriver not found." " Installing now:") sb_install.main(override="geckodriver") sys.argv = sys_args # Put back the original sys args firefox_driver = webdriver.Firefox( firefox_profile=profile, capabilities=firefox_capabilities, options=options) except WebDriverException: # Don't use Geckodriver: Only works for old versions of Firefox profile = _create_firefox_profile(downloads_path, proxy_string, user_agent, disable_csp) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = False firefox_driver = webdriver.Firefox( firefox_profile=profile, capabilities=firefox_capabilities) return firefox_driver except Exception as e: if headless: raise Exception(e) return webdriver.Firefox() elif browser_name == constants.Browser.INTERNET_EXPLORER: if not IS_WINDOWS: raise Exception( "IE Browser is for Windows-based operating systems only!") from selenium.webdriver.ie.options import Options ie_options = Options() ie_options.ignore_protected_mode_settings = False ie_options.ignore_zoom_level = True ie_options.require_window_focus = False ie_options.native_events = True ie_options.full_page_screenshot = True ie_options.persistent_hover = True ie_capabilities = ie_options.to_capabilities() if LOCAL_IEDRIVER and os.path.exists(LOCAL_IEDRIVER): make_driver_executable_if_not(LOCAL_IEDRIVER) return webdriver.Ie(capabilities=ie_capabilities) elif browser_name == constants.Browser.EDGE: if LOCAL_EDGEDRIVER and os.path.exists(LOCAL_EDGEDRIVER): make_driver_executable_if_not(LOCAL_EDGEDRIVER) # The new Microsoft Edge browser is based on Chromium chrome_options = _set_chrome_options( downloads_path, headless, proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent, disable_csp, enable_sync, user_data_dir, extension_zip, extension_dir, mobile_emulator, device_width, device_height, device_pixel_ratio) return webdriver.Chrome(executable_path=LOCAL_EDGEDRIVER, options=chrome_options) else: return webdriver.Edge() elif browser_name == constants.Browser.SAFARI: if "".join(sys.argv) == "-c": # Skip if multithreaded raise Exception("Can't run Safari tests in multi-threaded mode!") return webdriver.Safari() elif browser_name == constants.Browser.OPERA: if LOCAL_OPERADRIVER and os.path.exists(LOCAL_OPERADRIVER): make_driver_executable_if_not(LOCAL_OPERADRIVER) return webdriver.Opera() elif browser_name == constants.Browser.PHANTOM_JS: with warnings.catch_warnings(): # Ignore "PhantomJS has been deprecated" UserWarning warnings.simplefilter("ignore", category=UserWarning) return webdriver.PhantomJS() elif browser_name == constants.Browser.GOOGLE_CHROME: try: chrome_options = _set_chrome_options( downloads_path, headless, proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent, disable_csp, enable_sync, user_data_dir, extension_zip, extension_dir, mobile_emulator, device_width, device_height, device_pixel_ratio) if LOCAL_CHROMEDRIVER and os.path.exists(LOCAL_CHROMEDRIVER): make_driver_executable_if_not(LOCAL_CHROMEDRIVER) elif not is_chromedriver_on_path(): if not "".join(sys.argv) == "-c": # Skip if multithreaded from seleniumbase.console_scripts import sb_install sys_args = sys.argv # Save a copy of current sys args print("\nWarning: chromedriver not found. Installing now:") sb_install.main(override="chromedriver") sys.argv = sys_args # Put back the original sys args return webdriver.Chrome(options=chrome_options) except Exception as e: if headless: raise Exception(e) if LOCAL_CHROMEDRIVER and os.path.exists(LOCAL_CHROMEDRIVER): make_driver_executable_if_not(LOCAL_CHROMEDRIVER) return webdriver.Chrome() else: raise Exception("%s is not a valid browser option for this system!" % browser_name)
def get_remote_driver( browser_name, headless, servername, port, proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent, cap_file, disable_csp): downloads_path = download_helper.get_downloads_folder() download_helper.reset_downloads_folder() address = "http://%s:%s/wd/hub" % (servername, port) desired_caps = {} if cap_file: desired_caps = capabilities_parser.get_desired_capabilities(cap_file) if browser_name == constants.Browser.GOOGLE_CHROME: chrome_options = _set_chrome_options( downloads_path, headless, proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent, disable_csp) if headless: if not proxy_auth: # Headless Chrome doesn't support extensions, which are # required when using a proxy server that has authentication. # Instead, base_case.py will use PyVirtualDisplay when not # using Chrome's built-in headless mode. See link for details: # https://bugs.chromium.org/p/chromium/issues/detail?id=706008 chrome_options.add_argument("--headless") chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--no-sandbox") capabilities = chrome_options.to_capabilities() for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote( command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.FIREFOX: try: # Use Geckodriver for Firefox if it's on the PATH profile = _create_firefox_profile( downloads_path, proxy_string, user_agent, disable_csp) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = True if headless: firefox_capabilities['moz:firefoxOptions'] = ( {'args': ['-headless']}) for key in desired_caps.keys(): firefox_capabilities[key] = desired_caps[key] capabilities = firefox_capabilities address = "http://%s:%s/wd/hub" % (servername, port) return webdriver.Remote( command_executor=address, desired_capabilities=capabilities, browser_profile=profile) except WebDriverException: # Don't use Geckodriver: Only works for old versions of Firefox profile = _create_firefox_profile( downloads_path, proxy_string, user_agent, disable_csp) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = False if headless: firefox_capabilities['moz:firefoxOptions'] = ( {'args': ['-headless']}) for key in desired_caps.keys(): firefox_capabilities[key] = desired_caps[key] capabilities = firefox_capabilities return webdriver.Remote( command_executor=address, desired_capabilities=capabilities, browser_profile=profile) elif browser_name == constants.Browser.INTERNET_EXPLORER: capabilities = webdriver.DesiredCapabilities.INTERNETEXPLORER for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote( command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.EDGE: capabilities = webdriver.DesiredCapabilities.EDGE for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote( command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.SAFARI: capabilities = webdriver.DesiredCapabilities.SAFARI for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote( command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.OPERA: capabilities = webdriver.DesiredCapabilities.OPERA for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote( command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.PHANTOM_JS: capabilities = webdriver.DesiredCapabilities.PHANTOMJS for key in desired_caps.keys(): capabilities[key] = desired_caps[key] with warnings.catch_warnings(): # Ignore "PhantomJS has been deprecated" UserWarning warnings.simplefilter("ignore", category=UserWarning) return webdriver.Remote( command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.ANDROID: capabilities = webdriver.DesiredCapabilities.ANDROID for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote( command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.IPHONE: capabilities = webdriver.DesiredCapabilities.IPHONE for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote( command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.IPAD: capabilities = webdriver.DesiredCapabilities.IPAD for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote( command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.REMOTE: return webdriver.Remote( command_executor=address, desired_capabilities=desired_caps)
def get_remote_driver(browser_name, headless, servername, port, proxy_string): downloads_path = download_helper.get_downloads_folder() download_helper.reset_downloads_folder() address = "http://%s:%s/wd/hub" % (servername, port) if browser_name == constants.Browser.GOOGLE_CHROME: chrome_options = webdriver.ChromeOptions() prefs = { "download.default_directory": downloads_path, "credentials_enable_service": False, "profile": { "password_manager_enabled": False } } chrome_options.add_experimental_option("prefs", prefs) chrome_options.add_argument("--allow-file-access-from-files") chrome_options.add_argument("--allow-running-insecure-content") chrome_options.add_argument("--disable-infobars") if headless: chrome_options.add_argument("--headless") if proxy_string: chrome_options.add_argument('--proxy-server=%s' % proxy_string) if settings.START_CHROME_IN_FULL_SCREEN_MODE: # Run Chrome in full screen mode on WINDOWS chrome_options.add_argument("--start-maximized") # Run Chrome in full screen mode on MAC/Linux chrome_options.add_argument("--kiosk") capabilities = chrome_options.to_capabilities() return webdriver.Remote( command_executor=address, desired_capabilities=capabilities) if browser_name == constants.Browser.FIREFOX: try: # Use Geckodriver for Firefox if it's on the PATH profile = _create_firefox_profile(downloads_path, proxy_string) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = True if headless: firefox_capabilities['moz:firefoxOptions'] = ( {'args': ['-headless']}) capabilities = firefox_capabilities address = "http://%s:%s/wd/hub" % (servername, port) return webdriver.Remote( command_executor=address, desired_capabilities=capabilities, browser_profile=profile) except WebDriverException: # Don't use Geckodriver: Only works for old versions of Firefox profile = _create_firefox_profile(downloads_path, proxy_string) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = False if headless: firefox_capabilities['moz:firefoxOptions'] = ( {'args': ['-headless']}) capabilities = firefox_capabilities return webdriver.Remote( command_executor=address, desired_capabilities=capabilities, browser_profile=profile) if browser_name == constants.Browser.INTERNET_EXPLORER: return webdriver.Remote( command_executor=address, desired_capabilities=( webdriver.DesiredCapabilities.INTERNETEXPLORER)) if browser_name == constants.Browser.EDGE: return webdriver.Remote( command_executor=address, desired_capabilities=( webdriver.DesiredCapabilities.EDGE)) if browser_name == constants.Browser.SAFARI: return webdriver.Remote( command_executor=address, desired_capabilities=( webdriver.DesiredCapabilities.SAFARI)) if browser_name == constants.Browser.PHANTOM_JS: with warnings.catch_warnings(): # Ignore "PhantomJS has been deprecated" UserWarning warnings.simplefilter("ignore", category=UserWarning) return webdriver.Remote( command_executor=address, desired_capabilities=( webdriver.DesiredCapabilities.PHANTOMJS))
def get_local_driver(browser_name, headless, proxy_string): ''' Spins up a new web browser and returns the driver. Can also be used to spin up additional browsers for the same test. ''' downloads_path = download_helper.get_downloads_folder() download_helper.reset_downloads_folder() if browser_name == constants.Browser.FIREFOX: try: try: # Use Geckodriver for Firefox if it's on the PATH profile = _create_firefox_profile(downloads_path, proxy_string) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = True options = webdriver.FirefoxOptions() if headless: options.add_argument('-headless') firefox_driver = webdriver.Firefox( firefox_profile=profile, capabilities=firefox_capabilities, firefox_options=options) except WebDriverException: # Don't use Geckodriver: Only works for old versions of Firefox profile = _create_firefox_profile(downloads_path, proxy_string) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = False firefox_driver = webdriver.Firefox( firefox_profile=profile, capabilities=firefox_capabilities) return firefox_driver except Exception as e: if headless: raise Exception(e) return webdriver.Firefox() if browser_name == constants.Browser.INTERNET_EXPLORER: return webdriver.Ie() if browser_name == constants.Browser.EDGE: return webdriver.Edge() if browser_name == constants.Browser.SAFARI: return webdriver.Safari() if browser_name == constants.Browser.PHANTOM_JS: with warnings.catch_warnings(): # Ignore "PhantomJS has been deprecated" UserWarning warnings.simplefilter("ignore", category=UserWarning) return webdriver.PhantomJS() if browser_name == constants.Browser.GOOGLE_CHROME: try: chrome_options = webdriver.ChromeOptions() prefs = { "download.default_directory": downloads_path, "credentials_enable_service": False, "profile": { "password_manager_enabled": False } } chrome_options.add_experimental_option("prefs", prefs) chrome_options.add_argument("--allow-file-access-from-files") chrome_options.add_argument("--allow-running-insecure-content") chrome_options.add_argument("--disable-infobars") if headless: chrome_options.add_argument("--headless") if proxy_string: chrome_options.add_argument('--proxy-server=%s' % proxy_string) if settings.START_CHROME_IN_FULL_SCREEN_MODE: # Run Chrome in full screen mode on WINDOWS chrome_options.add_argument("--start-maximized") # Run Chrome in full screen mode on MAC/Linux chrome_options.add_argument("--kiosk") return webdriver.Chrome(options=chrome_options) except Exception as e: if headless: raise Exception(e) return webdriver.Chrome()
def get_remote_driver(browser_name, headless, servername, port, proxy_string, proxy_auth, proxy_user, proxy_pass, cap_file): downloads_path = download_helper.get_downloads_folder() download_helper.reset_downloads_folder() address = "http://%s:%s/wd/hub" % (servername, port) desired_caps = {} if cap_file: desired_caps = capabilities_parser.get_desired_capabilities(cap_file) if browser_name == constants.Browser.GOOGLE_CHROME: chrome_options = _set_chrome_options(downloads_path, proxy_string, proxy_auth, proxy_user, proxy_pass) if headless: if not proxy_auth: # Headless Chrome doesn't support extensions, which are # required when using a proxy server that has authentication. # Instead, base_case.py will use PyVirtualDisplay when not # using Chrome's built-in headless mode. See link for details: # https://bugs.chromium.org/p/chromium/issues/detail?id=706008 chrome_options.add_argument("--headless") chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--no-sandbox") capabilities = chrome_options.to_capabilities() for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote(command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.FIREFOX: try: # Use Geckodriver for Firefox if it's on the PATH profile = _create_firefox_profile(downloads_path, proxy_string) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = True if headless: firefox_capabilities['moz:firefoxOptions'] = ({ 'args': ['-headless'] }) for key in desired_caps.keys(): firefox_capabilities[key] = desired_caps[key] capabilities = firefox_capabilities address = "http://%s:%s/wd/hub" % (servername, port) return webdriver.Remote(command_executor=address, desired_capabilities=capabilities, browser_profile=profile) except WebDriverException: # Don't use Geckodriver: Only works for old versions of Firefox profile = _create_firefox_profile(downloads_path, proxy_string) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = False if headless: firefox_capabilities['moz:firefoxOptions'] = ({ 'args': ['-headless'] }) for key in desired_caps.keys(): firefox_capabilities[key] = desired_caps[key] capabilities = firefox_capabilities return webdriver.Remote(command_executor=address, desired_capabilities=capabilities, browser_profile=profile) elif browser_name == constants.Browser.INTERNET_EXPLORER: capabilities = webdriver.DesiredCapabilities.INTERNETEXPLORER for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote(command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.EDGE: capabilities = webdriver.DesiredCapabilities.EDGE for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote(command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.SAFARI: capabilities = webdriver.DesiredCapabilities.SAFARI for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote(command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.OPERA: capabilities = webdriver.DesiredCapabilities.OPERA for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote(command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.PHANTOM_JS: capabilities = webdriver.DesiredCapabilities.PHANTOMJS for key in desired_caps.keys(): capabilities[key] = desired_caps[key] with warnings.catch_warnings(): # Ignore "PhantomJS has been deprecated" UserWarning warnings.simplefilter("ignore", category=UserWarning) return webdriver.Remote(command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.ANDROID: capabilities = webdriver.DesiredCapabilities.ANDROID for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote(command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.IPHONE: capabilities = webdriver.DesiredCapabilities.IPHONE for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote(command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.IPAD: capabilities = webdriver.DesiredCapabilities.IPAD for key in desired_caps.keys(): capabilities[key] = desired_caps[key] return webdriver.Remote(command_executor=address, desired_capabilities=capabilities) elif browser_name == constants.Browser.REMOTE: return webdriver.Remote(command_executor=address, desired_capabilities=desired_caps)
def get_local_driver(browser_name, headless, proxy_string): ''' Spins up a new web browser and returns the driver. Can also be used to spin up additional browsers for the same test. ''' downloads_path = download_helper.get_downloads_folder() download_helper.reset_downloads_folder() if browser_name == constants.Browser.FIREFOX: try: try: # Use Geckodriver for Firefox if it's on the PATH profile = _create_firefox_profile(downloads_path, proxy_string) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = True options = webdriver.FirefoxOptions() if headless: options.add_argument('-headless') if LOCAL_GECKODRIVER and os.path.exists(LOCAL_GECKODRIVER): make_driver_executable_if_not(LOCAL_GECKODRIVER) firefox_driver = webdriver.Firefox( firefox_profile=profile, capabilities=firefox_capabilities, options=options, executable_path=LOCAL_GECKODRIVER) else: firefox_driver = webdriver.Firefox( firefox_profile=profile, capabilities=firefox_capabilities, options=options) except WebDriverException: # Don't use Geckodriver: Only works for old versions of Firefox profile = _create_firefox_profile(downloads_path, proxy_string) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = False firefox_driver = webdriver.Firefox( firefox_profile=profile, capabilities=firefox_capabilities) return firefox_driver except Exception as e: if headless: raise Exception(e) return webdriver.Firefox() elif browser_name == constants.Browser.INTERNET_EXPLORER: if not IS_WINDOWS: raise Exception( "IE Browser is for Windows-based operating systems only!") from selenium.webdriver.ie.options import Options ie_options = Options() ie_options.ignore_protected_mode_settings = False ie_options.ignore_zoom_level = True ie_options.require_window_focus = False ie_options.native_events = True ie_options.full_page_screenshot = True ie_options.persistent_hover = True ie_capabilities = ie_options.to_capabilities() if LOCAL_IEDRIVER and os.path.exists(LOCAL_IEDRIVER): make_driver_executable_if_not(LOCAL_IEDRIVER) return webdriver.Ie(capabilities=ie_capabilities, executable_path=LOCAL_IEDRIVER) else: return webdriver.Ie(capabilities=ie_capabilities) elif browser_name == constants.Browser.EDGE: if not IS_WINDOWS: raise Exception( "Edge Browser is for Windows-based operating systems only!") edge_capabilities = DesiredCapabilities.EDGE.copy() if LOCAL_EDGEDRIVER and os.path.exists(LOCAL_EDGEDRIVER): make_driver_executable_if_not(LOCAL_EDGEDRIVER) return webdriver.Edge(capabilities=edge_capabilities, executable_path=LOCAL_EDGEDRIVER) else: return webdriver.Edge(capabilities=edge_capabilities) elif browser_name == constants.Browser.SAFARI: return webdriver.Safari() elif browser_name == constants.Browser.OPERA: if LOCAL_OPERADRIVER and os.path.exists(LOCAL_OPERADRIVER): make_driver_executable_if_not(LOCAL_OPERADRIVER) return webdriver.Opera(executable_path=LOCAL_OPERADRIVER) else: return webdriver.Opera() elif browser_name == constants.Browser.PHANTOM_JS: with warnings.catch_warnings(): # Ignore "PhantomJS has been deprecated" UserWarning warnings.simplefilter("ignore", category=UserWarning) return webdriver.PhantomJS() elif browser_name == constants.Browser.GOOGLE_CHROME: try: chrome_options = _set_chrome_options(downloads_path, proxy_string) if headless: chrome_options.add_argument("--headless") chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--no-sandbox") if LOCAL_CHROMEDRIVER and os.path.exists(LOCAL_CHROMEDRIVER): make_driver_executable_if_not(LOCAL_CHROMEDRIVER) return webdriver.Chrome(executable_path=LOCAL_CHROMEDRIVER, options=chrome_options) else: return webdriver.Chrome(options=chrome_options) except Exception as e: if headless: raise Exception(e) if LOCAL_CHROMEDRIVER and os.path.exists(LOCAL_CHROMEDRIVER): make_driver_executable_if_not(LOCAL_CHROMEDRIVER) return webdriver.Chrome(executable_path=LOCAL_CHROMEDRIVER) else: return webdriver.Chrome()
def get_local_driver( browser_name, headless, proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent, disable_csp): ''' Spins up a new web browser and returns the driver. Can also be used to spin up additional browsers for the same test. ''' downloads_path = download_helper.get_downloads_folder() download_helper.reset_downloads_folder() if browser_name == constants.Browser.FIREFOX: try: try: # Use Geckodriver for Firefox if it's on the PATH profile = _create_firefox_profile( downloads_path, proxy_string, user_agent, disable_csp) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = True options = webdriver.FirefoxOptions() if headless: options.add_argument('-headless') if LOCAL_GECKODRIVER and os.path.exists(LOCAL_GECKODRIVER): make_driver_executable_if_not(LOCAL_GECKODRIVER) firefox_driver = webdriver.Firefox( firefox_profile=profile, capabilities=firefox_capabilities, options=options, executable_path=LOCAL_GECKODRIVER) else: firefox_driver = webdriver.Firefox( firefox_profile=profile, capabilities=firefox_capabilities, options=options) except WebDriverException: # Don't use Geckodriver: Only works for old versions of Firefox profile = _create_firefox_profile( downloads_path, proxy_string, user_agent, disable_csp) firefox_capabilities = DesiredCapabilities.FIREFOX.copy() firefox_capabilities['marionette'] = False firefox_driver = webdriver.Firefox( firefox_profile=profile, capabilities=firefox_capabilities) return firefox_driver except Exception as e: if headless: raise Exception(e) return webdriver.Firefox() elif browser_name == constants.Browser.INTERNET_EXPLORER: if not IS_WINDOWS: raise Exception( "IE Browser is for Windows-based operating systems only!") from selenium.webdriver.ie.options import Options ie_options = Options() ie_options.ignore_protected_mode_settings = False ie_options.ignore_zoom_level = True ie_options.require_window_focus = False ie_options.native_events = True ie_options.full_page_screenshot = True ie_options.persistent_hover = True ie_capabilities = ie_options.to_capabilities() if LOCAL_IEDRIVER and os.path.exists(LOCAL_IEDRIVER): make_driver_executable_if_not(LOCAL_IEDRIVER) return webdriver.Ie( capabilities=ie_capabilities, executable_path=LOCAL_IEDRIVER) else: return webdriver.Ie(capabilities=ie_capabilities) elif browser_name == constants.Browser.EDGE: if not IS_WINDOWS: raise Exception( "Edge Browser is for Windows-based operating systems only!") edge_capabilities = DesiredCapabilities.EDGE.copy() if LOCAL_EDGEDRIVER and os.path.exists(LOCAL_EDGEDRIVER): make_driver_executable_if_not(LOCAL_EDGEDRIVER) return webdriver.Edge( capabilities=edge_capabilities, executable_path=LOCAL_EDGEDRIVER) else: return webdriver.Edge(capabilities=edge_capabilities) elif browser_name == constants.Browser.SAFARI: return webdriver.Safari() elif browser_name == constants.Browser.OPERA: if LOCAL_OPERADRIVER and os.path.exists(LOCAL_OPERADRIVER): make_driver_executable_if_not(LOCAL_OPERADRIVER) return webdriver.Opera(executable_path=LOCAL_OPERADRIVER) else: return webdriver.Opera() elif browser_name == constants.Browser.PHANTOM_JS: with warnings.catch_warnings(): # Ignore "PhantomJS has been deprecated" UserWarning warnings.simplefilter("ignore", category=UserWarning) return webdriver.PhantomJS() elif browser_name == constants.Browser.GOOGLE_CHROME: try: chrome_options = _set_chrome_options( downloads_path, headless, proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent, disable_csp) if headless: # Headless Chrome doesn't support extensions, which are # required when using a proxy server that has authentication. # Instead, base_case.py will use PyVirtualDisplay when not # using Chrome's built-in headless mode. See link for details: # https://bugs.chromium.org/p/chromium/issues/detail?id=706008 if not proxy_auth: chrome_options.add_argument("--headless") chrome_options.add_argument("--disable-gpu") chrome_options.add_argument("--no-sandbox") if LOCAL_CHROMEDRIVER and os.path.exists(LOCAL_CHROMEDRIVER): make_driver_executable_if_not(LOCAL_CHROMEDRIVER) return webdriver.Chrome( executable_path=LOCAL_CHROMEDRIVER, options=chrome_options) else: return webdriver.Chrome(options=chrome_options) except Exception as e: if headless: raise Exception(e) if LOCAL_CHROMEDRIVER and os.path.exists(LOCAL_CHROMEDRIVER): make_driver_executable_if_not(LOCAL_CHROMEDRIVER) return webdriver.Chrome(executable_path=LOCAL_CHROMEDRIVER) else: return webdriver.Chrome() else: raise Exception( "%s is not a valid browser option for this system!" % browser_name)