/// <summary>
        /// Creates the web driver.
        /// </summary>
        /// <param name="options">The options.</param>
        /// <returns>The webdriver.</returns>
        public static ChromeDriver CreateWebDriver(IWritableOptions <ConfigurationParameters> options)
        {
            var driver = new ChromeDriver(
                ChromeDriverService.CreateDefaultService(options?.Value.BrowsersConfiguration.ChromeDriverPath),
                CreateChromeOptions(),
                TimeSpan.FromSeconds(options.Value.BrowsersConfiguration.CommandTimeout));

            options.Value.BrowsersConfiguration.SessionId    = driver.SessionId.ToString();
            options.Value.BrowsersConfiguration.WebDriverUrl = ReuseRemoteWebDriver.GetExecutorURLFromDriver(driver);

            return(driver);
        }
        /// <summary>
        /// Creates the web driver.
        /// </summary>
        /// <param name="configurationParameters">The configuration parameters.</param>
        /// <returns>The chrome webdriver.</returns>
        public static ChromeDriver CreateWebDriver(ConfigurationParameters configurationParameters)
        {
            var driver = new ChromeDriver(
                ChromeDriverService.CreateDefaultService(configurationParameters.BrowsersConfiguration.ChromeDriverPath),
                CreateChromeOptions(configurationParameters),
                configurationParameters.BrowsersConfiguration.ChromeBrowserCommandTimeout);

            configurationParameters.BrowsersConfiguration.ChromeSessionId = driver.SessionId.ToString();
            configurationParameters.BrowsersConfiguration.ChromeUrl       = ReuseRemoteWebDriver.GetExecutorURLFromDriver(driver);

            return(driver);
        }
        /// <summary>
        /// Creates the reusable web driver.
        /// </summary>
        /// <param name="options">The options.</param>
        /// <returns>The webdriver options.</returns>
        public static IWebDriver CreateReusableWebDriver(IWritableOptions <ConfigurationParameters> options)
        {
            var sessionId = options?.Value.BrowsersConfiguration.SessionId;
            var url       = options.Value.BrowsersConfiguration.WebDriverUrl;

            if (sessionId != null && url != null)
            {
                return(new ReuseRemoteWebDriver(
                           url,
                           sessionId,
                           CreateFirefoxOptions(options)));
            }

            var driver = CreateWebDriver(options);

            options.Value.BrowsersConfiguration.SessionId    = driver.SessionId.ToString();
            options.Value.BrowsersConfiguration.WebDriverUrl = ReuseRemoteWebDriver.GetExecutorURLFromDriver(driver);
            return(driver);
        }
        /// <summary>
        /// Creates the reusable web driver.
        /// </summary>
        /// <param name="configurationParameters">The configuration parameters.</param>
        /// <returns>The webdriver object.</returns>
        public static IWebDriver CreateReusableWebDriver(ConfigurationParameters configurationParameters)
        {
            var sessionId = configurationParameters.BrowsersConfiguration.FirefoxSessionId;
            var url       = configurationParameters.BrowsersConfiguration.FirefoxUrl;

            if (sessionId != null && url != null)
            {
                return(new ReuseRemoteWebDriver(
                           url,
                           sessionId,
                           CreateFirefoxOptions(configurationParameters)));
            }

            var driver = CreateWebDriver(configurationParameters);

            configurationParameters.BrowsersConfiguration.FirefoxSessionId = driver.SessionId.ToString();
            configurationParameters.BrowsersConfiguration.FirefoxUrl       = ReuseRemoteWebDriver.GetExecutorURLFromDriver(driver);
            return(driver);
        }