private WebDriverListener GetLocalWebDriver(WebDriverConfiguration driverConfig, L logger)
        {
            switch (driverConfig.BrowserName)
            {
            case Browser.Chrome:
                new DriverManager().SetUpDriver(new ChromeConfig());
                var chromeDriver = new ChromeDriver(WebDriverSettings.ChromeOptions(driverConfig));
                return(new WebDriverListener(chromeDriver, logger));

            case Browser.Firefox:
                new DriverManager().SetUpDriver(new FirefoxConfig());
                var firefoxDriver = new FirefoxDriver(WebDriverSettings.FirefoxOptions(driverConfig));
                return(new WebDriverListener(firefoxDriver, logger));

            case Browser.InternetExplorer:
                new DriverManager().SetUpDriver(new InternetExplorerConfig());
                var ieDriver = new InternetExplorerDriver(WebDriverSettings.InternetExplorerOptions());
                return(new WebDriverListener(ieDriver, logger));

            case Browser.Edge:
                new DriverManager().SetUpDriver(new EdgeConfig());
                var edgeDriver = new EdgeDriver(WebDriverSettings.EdgeOptions());
                return(new WebDriverListener(edgeDriver, logger));

            default:
                throw new ArgumentOutOfRangeException(nameof(Configuration.WebDriver.BrowserName), Configuration.WebDriver.BrowserName, null);
            }
        }
        private WebDriverListener GetRemoteDriver(WebDriverConfiguration driverConfig, L logger)
        {
            switch (driverConfig.BrowserName)
            {
            case Browser.Chrome:
                return(new WebDriverListener(new RemoteWebDriver(new Uri(driverConfig.GridUrl), WebDriverSettings.ChromeOptionsForRemote(driverConfig)), logger));

            case Browser.Firefox:
                return(new WebDriverListener(new RemoteWebDriver(new Uri(driverConfig.GridUrl), WebDriverSettings.FirefoxOptions(driverConfig)), logger));

            case Browser.InternetExplorer:
                return(new WebDriverListener(new RemoteWebDriver(new Uri(driverConfig.GridUrl), WebDriverSettings.InternetExplorerOptions()), logger));

            case Browser.Edge:
                return(new WebDriverListener(new RemoteWebDriver(new Uri(driverConfig.GridUrl), WebDriverSettings.EdgeOptions()), logger));

            default:
                throw new ArgumentOutOfRangeException(nameof(Configuration.WebDriver.BrowserName), Configuration.WebDriver.BrowserName, null);
            }
        }