def py_config(project_root, request) -> PyleniumConfig: """ Initialize a PyleniumConfig for each test 1. This starts by deserializing the user-created pylenium.json from the Project Root. 2. If that file is not found, then proceed with Pylenium Defaults. 3. Then any CLI arguments override their respective key/values. """ try: # 1. Load pylenium.json in Project Root, if available with open(f'{project_root}/pylenium.json') as file: _json = json.load(file) config = PyleniumConfig(**_json) except FileNotFoundError: # pylenium.json not found, proceed with defaults config = PyleniumConfig() # Override with any CLI args/options # Driver Settings cli_remote_url = request.config.getoption('--remote_url') if cli_remote_url: config.driver.remote_url = cli_remote_url cli_browser_options = request.config.getoption('--options') if cli_browser_options: config.driver.options = [ option.strip() for option in cli_browser_options.split(',') ] cli_browser = request.config.getoption('--browser') if cli_browser: config.driver.browser = cli_browser cli_capabilities = request.config.getoption('--caps') if cli_capabilities: # --caps must be in '{"name": "value", "boolean": true}' format # with double quotes around each key. booleans are lowercase. config.driver.capabilities = json.loads(cli_capabilities) cli_page_wait_time = request.config.getoption('--page_load_wait_time') if cli_page_wait_time and cli_page_wait_time.isdigit(): config.driver.page_load_wait_time = int(cli_page_wait_time) # Logging Settings cli_pylog_level = request.config.getoption('--pylog_level') if cli_pylog_level: config.logging.pylog_level = cli_pylog_level cli_screenshots_on = request.config.getoption('--screenshots_on') if cli_screenshots_on: shots_on = True if cli_screenshots_on.lower() == 'true' else False config.logging.screenshots_on = shots_on cli_extensions = request.config.getoption('--extensions') if cli_extensions: config.driver.extension_paths = [ ext.strip() for ext in cli_extensions.split(',') ] return config
def py_config(project_root, request) -> PyleniumConfig: """ Initialize a PyleniumConfig for each test This starts by deserializing pylenium.json into PyleniumConfig. Then any CLI arguments override their respective key/values. """ # Deserialize pylenium.json try: with open(f'{project_root}/pylenium.json') as file: _json = json.load(file) config = PyleniumConfig(**_json) except BaseException: raise FileNotFoundError( "Could not find pylenium.json in Project Root." " Make sure Pylenium's pylenium.json and conftest.py are at the top-level directory." ) # Override with any CLI args/options # Driver Settings cli_remote_url = request.config.getoption('--remote_url') if cli_remote_url: config.driver.remote_url = cli_remote_url cli_browser_options = request.config.getoption('--options') if cli_browser_options: config.driver.options = [ option.strip() for option in cli_browser_options.split(',') ] # Logging Settings cli_pylog_level = request.config.getoption('--pylog_level') if cli_pylog_level: config.logging.pylog_level = cli_pylog_level cli_screenshots_on = request.config.getoption('--screenshots_on') if cli_screenshots_on: shots_on = True if cli_screenshots_on.lower() == 'true' else False config.logging.screenshots_on = shots_on return config