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, remote_debug, 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 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 = True 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, remote_debug, 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, "default_content_setting_values.notifications": 0, "default_content_settings.popups": 0, "managed_default_content_settings.popups": 0, "content_settings.exceptions.automatic_downloads.*.setting": 1, "profile.password_manager_enabled": False, "profile.default_content_setting_values.notifications": 0, "profile.default_content_settings.popups": 0, "profile.managed_default_content_settings.popups": 0, "profile.default_content_setting_values.automatic_downloads": 1 } 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_argument( "--disable-blink-features=AutomationControlled") 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") if user_data_dir: abs_path = os.path.abspath(user_data_dir) edge_options.add_argument("user-data-dir=%s" % abs_path) if extension_zip: # Can be a comma-separated list of .ZIP or .CRX files extension_zip_list = extension_zip.split(',') for extension_zip_item in extension_zip_list: abs_path = os.path.abspath(extension_zip_item) edge_options.add_extension(abs_path) if extension_dir: # load-extension input can be a comma-separated list abs_path = os.path.abspath(extension_dir) edge_options.add_argument("--load-extension=%s" % abs_path) 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 (settings.DISABLE_CSP_ON_CHROME or disable_csp) and (not headless): # Headless Edge doesn't support extensions, which are required # for disabling the Content Security Policy on Edge edge_options = _add_chrome_disable_csp_extension(edge_options) edge_options.add_argument("--enable-sync") if proxy_string: if proxy_auth: edge_options = _add_chrome_proxy_extension( edge_options, proxy_string, proxy_user, proxy_pass) 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 remote_debug: # To access the Remote Debugger, go to: http://localhost:9222 # while a Chromium driver is running. # Info: https://chromedevtools.github.io/devtools-protocol/ edge_options.add_argument('--remote-debugging-port=9222') 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, remote_debug, 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, remote_debug, 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 init_driver(n): common_tools.save_log(statement.start_to_init_browser) chrome_capabilities = { 'browserName': 'chrome', 'chromeOptions': { 'useAutomationExtension': False, 'forceDevToolsScreenshot': True, 'args': ['--disable-infobars'] # 'args': ['--start-maximized', '--disable-infobars'] } } ie11_capabilities = { 'browserName': 'internet explorer', 'ie_options': { 'nativeEvents': False, 'unexpectedAlertBehaviour': True, 'ignoreProtectedModeSettings': True, 'disable-popup-blocking': True, 'enablePersistentHover': True, 'ignoreZoomSetting': True, } } ie11_opts = Options() ie11_opts.ignore_protected_mode_settings = True ie11_opts.ignore_zoom_level = True ie11_opts.require_window_focus = False ie11_opts.native_events = False ie11_opts.persistent_hover = True # INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS ie11_cap = DesiredCapabilities.INTERNETEXPLORER.copy() ie11_cap["ignoreProtectedModeSettings"] = True # ie11_cap["IntroduceInstabilityByIgnoringProtectedModeSettings"] = True ie11_cap["nativeEvents"] = False # ie11_cap["browserFocus"] = False ie11_cap["ignoreZoomSetting"] = True ie11_cap["requireWindowFocus"] = False # ie11_cap["INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS"] = True if (n <= 40): driver_fire = webdriver.Edge() browser = 0 elif (n <= 80): browser = 1 profile = webdriver.FirefoxProfile() profile.set_preference('browser.download.dir', 'c:\\') profile.set_preference('browser.download.folderList', 2) profile.set_preference('browser.download.manager.showWhenStarting', False) profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/pdf') driver_fire = webdriver.Firefox(timeout=settings.browser_launch_timeout, firefox_profile=profile) elif (n <=120): browser = 2 driver_fire = webdriver.Chrome(desired_capabilities=chrome_capabilities) # elif (n <= 120): # browser = 3 # driver_fire = webdriver.Ie(capabilities=ie11_capabilities) # driver_fire = webdriver.Ie(ie_options=ie11_opts) # # driver_fire = webdriver.Ie(capabilities=ie11_cap) # # driver_fire = webdriver.Ie(desired_capabilities=ie11_cap) # browser = 3 driver = SmartEventFiringWebDriver(driver=driver_fire, event_listener=listener.SMART_Listener()) return driver, browser
def get_local_driver(browser_name, headless, servername, proxy_string, proxy_auth, proxy_user, proxy_pass, user_agent, disable_csp, 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, 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, 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 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!") safari_capabilities = _set_safari_capabilities() return webdriver.Safari(desired_capabilities=safari_capabilities) 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, 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_local_driver(browser_name, headless, proxy_string, proxy_auth, proxy_user, proxy_pass): ''' 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, proxy_auth, proxy_user, proxy_pass) 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()
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 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)
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): ''' 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) return webdriver.Chrome(executable_path=LOCAL_EDGEDRIVER, options=chrome_options) else: return webdriver.Edge() 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() 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) 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_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)
if _platform == "linux" or _platform == "linux2": logger.info("starting application on linux - " + str(platform.release())) platformApp = "plinux" elif _platform == "darwin": logger.info("starting application on macos - " + str(platform.release())) platformApp = "pmacos" elif _platform == "win32" or _platform == "win64": logger.info("starting application on windows - " + str(platform.release())) platformApp = "pwin64" ieOptions = Options() ieOptions.ignore_protected_mode_settings = True ieOptions.ignore_zoom_level = True ieOptions.force_create_process_api = True ieOptions.native_events = True ieOptions.require_window_focus = True ieOptions.set_capability("version", "10") ieOptions.set_capability("browserName", "internet explorer") driver = webdriver.ie.webdriver.WebDriver(appPath + '\\IEDriverServer.exe', options=ieOptions) else: logger.info("unsupported platform %s. application cannot continue", _platform) sys.exit(-3) logger.info("application root folder would be %s", appPath) logger.info("application will use %s for native invocations", platformApp)
def test_US299725_IE11(self): # IE_path = r'C:\Program Files\Internet Explorer\ExtExport.exe' # os.environ['webdriver.ie.driver'] = IE_path # driver = webdriver.Ie(IE_path) caps = DesiredCapabilities.INTERNETEXPLORER caps = { 'ignoreProtectedModeSettings': True, 'ignore_protected_mode_settings': True, 'ignore_zoom_level': True, 'native_events': False, 'persistent_hover': False, 'ELEMENT_SCROLL_BEHAVIOR': True, 'require_window_focus': True } opts = IEoptions() opts.ignore_protected_mode_settings = True opts.ignore_zoom_level = True opts.require_window_focus = True opts.native_events = False opts.ignore_protected_mode_settings = True opts.persistent_hover = False opts.ELEMENT_SCROLL_BEHAVIOR = True # opts.ensure_clean_session = True # ie_options=opts,executable_path=IE_path, driver = webdriver.Ie(options=opts) reports_dic_enterprise = SC.read_file_as_list_report_US299725('enterprise') reports_values = list(reports_dic_enterprise.values()) reports_keys = list(reports_dic_enterprise.keys()) SC.login_(driver) # go to report search page # IP_report.go_to_report_ip_Enterprise(driver) IP_report.go_to_report_ip_Enterprise(driver) for i in range(10, 19): report = reports_values[i] # find "report name" try: IP_report.find_report_ip(driver, report) except: print('---try--except------' + report + '--not found-----') # click "report name" IP_report.go_to_report_CS(driver, report) # add filters besides the default ones IP_report.add_filters_besides_default_ones(driver, i) # Click "View report" IP_report.view_report_by_default_filters(driver) # Go to report view page IP_report.swiitch_to_report_view_page(driver, report, reports_keys[i]) # Export report # IP_report.export_report(driver, report) handles = driver.window_handles driver.close() driver.switch_to.window(handles[0]) ACT.wait_invisibility_of_element_located(driver) close = driver.find_element_by_xpath('//span[text()="close"]') close.click()