Module ez_visual_regression.configuration

Expand source code
# Standard library dependencies
import os 
from typing import Union, List, Dict


# Third party dependencies
import yaml
from selenium.webdriver.remote.webdriver import WebDriver              # Used for type hinting

from ez_visual_regression.api import *

def parse_config(config_path: str) -> Dict[str, Union[str, List[List[Union[bool,None,int,str]]]]]:
    """Takes in a path to a config file and parses it for use with execute_config()

    Parameters
    ----------
    config_path : str
        The path to a file

    Returns
    -------
    Dict[str, Union[str, List[List[Union[bool,None,int,str]]]]]
        A dictionary with 3 keys, driver (a WebDriver object), tests (all arguments for for assert_image_similarity_to_baseline() calls), screenshots (all arguments for get_screenshot() calls)

    Raises
    ------
    FileNotFoundError
        If a config path does not exist
    """
    if not os.path.exists(config_path):
        raise FileNotFoundError(f"Config path {config_path} does not exist")
    with open(config_path, "r") as f:
        config = yaml.safe_load(f)

    driver = config.get("driver", "chrome").lower()
    tests = []
    screenshots = []

    if config.get("tests", False):
        for test in config["tests"]:
            url = config["tests"][test]["url"]
            locator = config["tests"][test].get("locator", False)
            warning_threshold = config["tests"][test].get("warning_threshold", 10)
            error_threshold = config["tests"][test].get("error_threshold", 30)
            ignored_elements = config["tests"][test].get("ignored_elements", None)
            folder = config["tests"][test].get("folder", test)
            multielements = config["tests"][test].get("multielements", False)
            tests.append([url, folder, locator, warning_threshold, error_threshold, ignored_elements, multielements])
    if config.get("screenshots", False):
        for screenshot in config["screenshots"]:
            url = config["screenshots"][screenshot]["url"]
            locator = config["screenshots"][screenshot].get("locator", False)
            ignored_elements = config["screenshots"][screenshot].get("ignored_elements", None)
            folder = config["screenshots"][screenshot].get("folder", screenshot)
            filename = os.path.join(folder, "screenshot.png")
            screenshots.append([url,filename,locator,ignored_elements])
    return {"driver":driver, "tests":tests, "screenshots": screenshots}

def execute_config(config: Dict[str, Union[str, List[List[Union[bool,None,int,str]]]]]):
    config["driver"] = instantiate_driver(config["driver"])
    print("Executing tests")
    for test in config["tests"]:
        assert_image_similarity_to_baseline(config["driver"], *test)

    print("Executing screenshots")
    for screenshot in config["screenshots"]:
        get_screenshot(config["driver"], *screenshot)
    

Functions

def execute_config(config: Dict[str, Union[str, List[List[Union[bool, ForwardRef(None), int, str]]]]])
Expand source code
def execute_config(config: Dict[str, Union[str, List[List[Union[bool,None,int,str]]]]]):
    config["driver"] = instantiate_driver(config["driver"])
    print("Executing tests")
    for test in config["tests"]:
        assert_image_similarity_to_baseline(config["driver"], *test)

    print("Executing screenshots")
    for screenshot in config["screenshots"]:
        get_screenshot(config["driver"], *screenshot)
def parse_config(config_path: str) ‑> Dict[str, Union[str, List[List[Union[bool, ForwardRef(None), int, str]]]]]

Takes in a path to a config file and parses it for use with execute_config()

Parameters

config_path : str
The path to a file

Returns

Dict[str, Union[str, List[List[Union[bool,None,int,str]]]]]
A dictionary with 3 keys, driver (a WebDriver object), tests (all arguments for for assert_image_similarity_to_baseline() calls), screenshots (all arguments for get_screenshot() calls)

Raises

FileNotFoundError
If a config path does not exist
Expand source code
def parse_config(config_path: str) -> Dict[str, Union[str, List[List[Union[bool,None,int,str]]]]]:
    """Takes in a path to a config file and parses it for use with execute_config()

    Parameters
    ----------
    config_path : str
        The path to a file

    Returns
    -------
    Dict[str, Union[str, List[List[Union[bool,None,int,str]]]]]
        A dictionary with 3 keys, driver (a WebDriver object), tests (all arguments for for assert_image_similarity_to_baseline() calls), screenshots (all arguments for get_screenshot() calls)

    Raises
    ------
    FileNotFoundError
        If a config path does not exist
    """
    if not os.path.exists(config_path):
        raise FileNotFoundError(f"Config path {config_path} does not exist")
    with open(config_path, "r") as f:
        config = yaml.safe_load(f)

    driver = config.get("driver", "chrome").lower()
    tests = []
    screenshots = []

    if config.get("tests", False):
        for test in config["tests"]:
            url = config["tests"][test]["url"]
            locator = config["tests"][test].get("locator", False)
            warning_threshold = config["tests"][test].get("warning_threshold", 10)
            error_threshold = config["tests"][test].get("error_threshold", 30)
            ignored_elements = config["tests"][test].get("ignored_elements", None)
            folder = config["tests"][test].get("folder", test)
            multielements = config["tests"][test].get("multielements", False)
            tests.append([url, folder, locator, warning_threshold, error_threshold, ignored_elements, multielements])
    if config.get("screenshots", False):
        for screenshot in config["screenshots"]:
            url = config["screenshots"][screenshot]["url"]
            locator = config["screenshots"][screenshot].get("locator", False)
            ignored_elements = config["screenshots"][screenshot].get("ignored_elements", None)
            folder = config["screenshots"][screenshot].get("folder", screenshot)
            filename = os.path.join(folder, "screenshot.png")
            screenshots.append([url,filename,locator,ignored_elements])
    return {"driver":driver, "tests":tests, "screenshots": screenshots}