public ICapabilities GetCapabilitiesFromBrowserName(string browserName, string browserVersion, string platformName, Dictionary <string, object> optionalCapabilities = null)
        {
            optionalCapabilities = optionalCapabilities ?? new Dictionary <string, object>();
            DriverOptions browserOptions;

            switch (browserName)
            {
            case "firefox":
                browserOptions = new OpenQA.Selenium.Firefox.FirefoxOptions();
                break;

            case "safari":
                browserOptions = new OpenQA.Selenium.Safari.SafariOptions();
                break;

            case "internet explorer":
                browserOptions = new OpenQA.Selenium.IE.InternetExplorerOptions();
                break;

            case "microsoft edge":
                browserOptions = new OpenQA.Selenium.Edge.EdgeOptions();
                break;

            default:
                browserOptions = new OpenQA.Selenium.Chrome.ChromeOptions();
                break;
            }

            browserOptions.BrowserVersion = browserVersion;
            browserOptions.PlatformName   = platformName;
            var cloudOptions = new Dictionary <string, object>();

            foreach (var optionalCapability in optionalCapabilities)
            {
                cloudOptions.Add(optionalCapability.Key, optionalCapability.Value);
            }

            cloudOptions.Add("username", this.username);
            cloudOptions.Add("password", this.authkey);
            browserOptions.AddAdditionalOption("cbt:options", cloudOptions);
            return(browserOptions.ToCapabilities());
        }