private static object getSafariCapabilities_()
        {
            SafariOptions options     = new SafariOptions();
            ICapabilities cpabilities = options.ToCapabilities();

            return(cpabilities);
        }
        private static ICapabilities ReturnBrowserOptions(string platformName,
                                                          string browserName,
                                                          string browserVersion)
        {
            DriverOptions browserOptions;

            switch (browserName)
            {
            case "chrome":
                browserOptions = new ChromeOptions();
                break;

            case "edge":
                browserOptions = new EdgeOptions();
                break;

            case "firefox":
                browserOptions = new FirefoxOptions();
                break;

            case "safari":
                browserOptions = new SafariOptions();
                break;

            default:
                throw new Exception($"Browser {browserName} not supported!");
            }

            browserOptions.PlatformName   = platformName;
            browserOptions.BrowserVersion = browserVersion;
            return(browserOptions.ToCapabilities());
        }
Пример #3
0
        private IWebDriver GetRemoteBrowser(BrowserType browser, string version = null, DriverOptions options = null, LogLevel logLevel = LogLevel.Severe)
        {
            var gridAddress = new Uri($"{WebDriverSettings.SeleniumGridServer}/wd/hub");

            Log.Debug($"EXECUTING: GetRemoteBrowser(): {gridAddress.AbsoluteUri},{browser},{(!string.IsNullOrEmpty(version) ? version : string.Empty)},{(options != null ? options.GetType().Name : string.Empty)},{logLevel}");
            ICapabilities capabillities;

            SetupDriverOptions(browser, options, logLevel);

            switch (browser)
            {
            case BrowserType.Chrome:
                capabillities = _chromeOpts.ToCapabilities();
                break;

            case BrowserType.Edge:
                capabillities = _edgeOpts.ToCapabilities();
                break;

            case BrowserType.Firefox:
                capabillities = _firefoxOpts.ToCapabilities();
                break;

            case BrowserType.IE:
                _ieOpts.AddAdditionalCapability("version", !string.IsNullOrEmpty(version) ? version : "11");
                capabillities = _ieOpts.ToCapabilities();
                break;

            case BrowserType.Phantomjs:
                capabillities = _phantomJsOpts.ToCapabilities();
                break;

            case BrowserType.Safari:
                capabillities = _safariOpts.ToCapabilities();
                break;

            default:
                throw new Exception($"Unsupported BrowserType={browser}");
            }

            try
            {
                return(new RemoteWebDriver(gridAddress, capabillities));
            }

            catch (Exception e)
            {
                if (e is WebDriverTimeoutException || e is WebDriverException)
                {
                    var msg = $"Unable to connect to Selenium Grid: {gridAddress}, {e.Message}";
                    throw new Exception(msg, e);
                }

                throw new Exception($"An exception has occurred: {e.Message}", e);
            }
        }
Пример #4
0
        public void ShouldOpenOnSafari()
        {
            // Set your sauce user name and access key from environment variables
            var sauceUserName  = Environment.GetEnvironmentVariable("SAUCE_USERNAME", EnvironmentVariableTarget.User);
            var sauceAccessKey = Environment.GetEnvironmentVariable("SAUCE_ACCESS_KEY", EnvironmentVariableTarget.User);

            //configure sauce labs options
            var sauceOptions = new Dictionary <string, object>
            {
                ["username"]  = sauceUserName,
                ["accessKey"] = sauceAccessKey,
                ["name"]      = MethodBase.GetCurrentMethod().Name
            };

            //configure the browser options
            var safariOptions = new SafariOptions
            {
                BrowserVersion = "latest",
                PlatformName   = "macOS 10.15",
                //AcceptInsecureCertificates = true Don't use this as Safari doesn't support Insecure certs
            };

            //merge sauce options with browser options
            safariOptions.AddAdditionalCapability("sauce:options", sauceOptions);

            //It's not a good idea to set this value too high because if something goes wrong,
            // the test will just hang for this amount of time. 60 sec is plenty
            var connectionTimeout = TimeSpan.FromSeconds(60);

            _driver = new RemoteWebDriver(new Uri("https://ondemand.saucelabs.com/wd/hub"),
                                          safariOptions.ToCapabilities(), connectionTimeout);

            //navigate to the url of the Sauce Labs Sample app
            _driver.Navigate().GoToUrl("https://www.saucedemo.com");

            //Create an instance of a Selenium explicit wait so that we can dynamically wait for an element
            var wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(5));
            //wait for the user name field to be visible and store that element into a variable
            var userNameField = wait.Until(ExpectedConditions.ElementIsVisible(By.CssSelector("[type='text']")));

            //type the user name string into the user name field
            userNameField.SendKeys("standard_user");
            //type the password into the password field
            _driver.FindElement(By.CssSelector("[type='password']")).SendKeys("secret_sauce");
            //hit Login button
            _driver.FindElement(By.CssSelector("[type='submit']")).Click();

            //Synchronize on the next page and make sure it loads
            var inventoryPageLocator =
                wait.Until(ExpectedConditions.ElementIsVisible(By.Id("inventory_container")));

            //Assert that the inventory page displayed appropriately
            Assert.IsTrue(inventoryPageLocator.Displayed);
        }
Пример #5
0
        /// <summary>
        /// Get the remote desired capability
        /// </summary>
        /// <returns>The remote desired capability</returns>
        private static ICapabilities GetRemoteCapabilities()
        {
            DriverOptions options              = null;
            string        remoteBrowser        = GetRemoteBrowserName();
            string        remotePlatform       = GetRemotePlatform();
            string        remoteBrowserVersion = GetRemoteBrowserVersion();

            switch (remoteBrowser.ToUpper())
            {
            case "INTERNET EXPLORER":
            case "INTERNETEXPLORER":
            case "IE":
                options = new InternetExplorerOptions();
                break;

            case "FIREFOX":
                options = new FirefoxOptions();
                break;

            case "CHROME":
                options = new ChromeOptions();
                break;

            case "EDGE":
                options = new EdgeOptions();
                break;

            case "SAFARI":
                options = new SafariOptions();
                break;

            default:
                throw new ArgumentException(StringProcessor.SafeFormatter("Remote browser type '{0}' is not supported", remoteBrowser));
            }

            // Add a platform setting if one was provided
            if (remotePlatform.Length > 0)
            {
                options.AddAdditionalCapability("platform", remotePlatform);
            }

            // Add a remote browser setting if one was provided
            if (remoteBrowserVersion.Length > 0)
            {
                options.AddAdditionalCapability("version", remoteBrowserVersion);
            }

            // Add RemoteCapabilites section if it exists
            options.SetDriverOptions();

            return(options.ToCapabilities());
        }
Пример #6
0
        private static IWebDriver CreateDesktopWebDriver()
        {
            DesiredCapabilities capabilities;

            var browser = Config.Settings.BrowserStackSettings.BsBrowser;

            switch (browser)
            {
            case "Chrome":
                var chromeOptions = new ChromeOptions();
                chromeOptions.AddArguments("--disable-popup-blocking");
                capabilities = chromeOptions.ToCapabilities() as DesiredCapabilities;
                SetCapabilities(capabilities, "Chrome");
                return(CreateRemoteWebDriver(capabilities));

            case "Firefox":
                FirefoxOptions firefoxOptions = new FirefoxOptions();
                capabilities = firefoxOptions.ToCapabilities() as DesiredCapabilities;
                SetCapabilities(capabilities, "Firefox");
                return(CreateRemoteWebDriver(capabilities));

            case "IE":
                InternetExplorerOptions ieOptions = new InternetExplorerOptions();
                capabilities = ieOptions.ToCapabilities() as DesiredCapabilities;
                capabilities.SetCapability("browserstack.ie.enablePopups", "true");
                SetCapabilities(capabilities, "IE");
                return(CreateRemoteWebDriver(capabilities));

            case "Edge":
                var edgeOptions = new EdgeOptions();
                edgeOptions.PageLoadStrategy = PageLoadStrategy.Eager;
                capabilities = edgeOptions.ToCapabilities() as DesiredCapabilities;
                SetCapabilities(capabilities, "Edge");
                return(CreateRemoteWebDriver(capabilities));

            case "Safari":
                SafariOptions safariOptions = new SafariOptions();
                capabilities = safariOptions.ToCapabilities() as DesiredCapabilities;
                capabilities.SetCapability("browserstack.safari.enablePopups", "true");
                SetCapabilities(capabilities, "Safari");
                return(CreateRemoteWebDriver(capabilities));

            case "Opera":
                OperaOptions operaOptions = new OperaOptions();
                capabilities = operaOptions.ToCapabilities() as DesiredCapabilities;
                SetCapabilities(capabilities, "Opera");
                return(CreateRemoteWebDriver(capabilities));

            default:
                throw new ArgumentOutOfRangeException("'Browser' value: " + browser);
            }
        }
Пример #7
0
        public void SafariW3C()
        {
            SafariOptions safariOptions = new SafariOptions
            {
                BrowserVersion = "12.0",
                PlatformName   = "macOS 10.13"
                                 //AcceptInsecureCertificates = true Don't use this as Safari doesn't support Insecure certs
            };

            sauceOptions.Add("name", MethodBase.GetCurrentMethod().Name);
            safariOptions.AddAdditionalOption("sauce:options", sauceOptions);

            _driver = new RemoteWebDriver(new Uri("https://ondemand.saucelabs.com/wd/hub"),
                                          safariOptions.ToCapabilities(), TimeSpan.FromSeconds(30));
            GoToThenAssert();
        }
        public void SafariDriverTest()
        {
            var options = new SafariOptions();

            options.AddAdditionalCapability(CapabilityType.Version, "latest");
            options.AddAdditionalCapability(CapabilityType.Platform, "macOS 10.13");
            options.AddAdditionalCapability("username", sauceUserName);
            options.AddAdditionalCapability("accessKey", sauceAccessKey);

            using (var driver = new RemoteWebDriver(RemoteAddress, options.ToCapabilities(), CommandTimeout))
            {
                //driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(30);
                //driver.Manage().Timeouts().AsynchronousJavaScript = TimeSpan.FromSeconds(10);
                driver.Navigate().GoToUrl("https://login.live.com");
            }
        }
Пример #9
0
        public void SafariW3C()
        {
            var safariOptions = new SafariOptions
            {
                BrowserVersion = "latest",
                PlatformName   = "macOS 10.15"
                                 //AcceptInsecureCertificates = true Don't use this as Safari doesn't support Insecure certs
            };

            _sauceOptions.Add("name", TestContext.CurrentContext.Test.Name);

            safariOptions.AddAdditionalCapability("sauce:options", _sauceOptions);

            _driver = new RemoteWebDriver(new Uri("https://ondemand.saucelabs.com/wd/hub"),
                                          safariOptions.ToCapabilities(), TimeSpan.FromSeconds(600));
            _driver.Navigate().GoToUrl("https://www.saucedemo.com");
            Assert.Pass();
        }
Пример #10
0
        public void Setup()
        {
            _sauceUserName  = Environment.GetEnvironmentVariable("SAUCE_USERNAME", EnvironmentVariableTarget.User);
            _sauceAccessKey = Environment.GetEnvironmentVariable("SAUCE_ACCESS_KEY", EnvironmentVariableTarget.User);
            _sauceOptions   = new Dictionary <string, object>
            {
                ["username"]        = _sauceUserName,
                ["accessKey"]       = _sauceAccessKey,
                ["deviceName"]      = "iPhone XS Max Simulator",
                ["platformVersion"] = "13.0"
            };
            var options = new SafariOptions
            {
                BrowserVersion = "latest",
                PlatformName   = "iOS"
            };

            _sauceOptions.Add("name", MethodBase.GetCurrentMethod().Name);
            options.AddAdditionalCapability("sauce:options", _sauceOptions);

            _driver = new RemoteWebDriver(new Uri("https://ondemand.saucelabs.com/wd/hub"),
                                          options.ToCapabilities(), TimeSpan.FromSeconds(30));
        }
        protected void SetUpDriver(browserType browser = browserType.Chrome, bool legacy = false, bool headless = false)
        {
            switch (browser)
            {
            case browserType.Chrome:
                driver = CreateChromeDriver(headless: headless);
                break;

            case browserType.Firefox:
                driver = CreateFirefoxDriver(headless: headless);
                break;

            case browserType.IE:
                var sauceOptions = new Dictionary <string, object>();
                sauceOptions.Add("username", SAUCE_USERNAME);
                sauceOptions.Add("accesskey", SAUCE_ACCESS_KEY);
                var browserOptionsIE = new InternetExplorerOptions();
                browserOptionsIE.PlatformName   = "Windows 10";
                browserOptionsIE.BrowserVersion = "11.285";
                browserOptionsIE.AddAdditionalCapability("sauce:options", sauceOptions, true);
                driver = new RemoteWebDriver(new Uri(SAUCE_SELENIUM_URL), browserOptionsIE.ToCapabilities(), TimeSpan.FromMinutes(4));
                break;

            case browserType.Edge:
                var sauceOptionsEdge = new Dictionary <string, object>();
                sauceOptionsEdge.Add("username", SAUCE_USERNAME);
                sauceOptionsEdge.Add("accesskey", SAUCE_ACCESS_KEY);
                var browserOptionsEdge = new EdgeOptions();
                browserOptionsEdge.PlatformName   = "Windows 10";
                browserOptionsEdge.BrowserVersion = "18.17763";
                browserOptionsEdge.AddAdditionalCapability("sauce:options", sauceOptionsEdge);
                driver = new RemoteWebDriver(new Uri(SAUCE_SELENIUM_URL), browserOptionsEdge.ToCapabilities(), TimeSpan.FromMinutes(4));
                break;

            case browserType.Safari11:
                if (legacy)
                {
                    setDesiredCapabilities("macOS 10.12", "Safari", "11.0");
                    driver = new RemoteWebDriver(new Uri(SAUCE_SELENIUM_URL), caps, TimeSpan.FromMinutes(4));
                }
                else
                {
                    browserOptions = new SafariOptions();
                    setDriverOptions(ref browserOptions, "macOS 10.12", "11.0");
                    driver = new RemoteWebDriver(new Uri(SAUCE_SELENIUM_URL), browserOptions.ToCapabilities(), TimeSpan.FromMinutes(4));
                }
                break;

            case browserType.Safari12:
                if (legacy)
                {
                    setDesiredCapabilities("macOS 10.13", "Safari", "12.1");
                    driver = new RemoteWebDriver(new Uri(SAUCE_SELENIUM_URL), caps, TimeSpan.FromMinutes(4));
                }
                else
                {
                    browserOptions = new SafariOptions();
                    setDriverOptions(ref browserOptions, "macOS 10.13", "12.1");
                    driver = new RemoteWebDriver(new Uri(SAUCE_SELENIUM_URL), browserOptions.ToCapabilities(), TimeSpan.FromMinutes(4));
                }
                break;

            default:
                throw new Exception("Unknown browser type");
            }
        }
Пример #12
0
        public IWebDriver GetWebDriver(Preferences preferences)
        {
            switch (preferences.BrowserName.ToUpper())
            {
            case "IE":
            {
                InternetExplorerOptions ieOptions = new InternetExplorerOptions
                {
                    EnsureCleanSession = true,
                    IgnoreZoomLevel    = true
                };
                ieOptions.SetLoggingPreference(LogType.Browser, LogLevel.All);

                return(new InternetExplorerDriver(ieOptions));
            }

            case "CHROME":
            {
                SafariOptions options = new SafariOptions();
                //ChromeOptions options = new ChromeOptions();
                //options.SetLoggingPreference(LogType.Browser, preferences.BrowserConsoleLog ? LogLevel.All : LogLevel.Off);

                return(preferences.RemoteDriver ? new RemoteWebDriver(new Uri("http://10.217.34.66:4444/wd/hub"), options.ToCapabilities()) : new SafariDriver(options));
            }

            case "FIREFOX":
            {
                return(new FirefoxDriver());
            }

            default:
            {
                throw new Exception("Invalid Browser Selected");
            }
            }
        }
        public IBrowserDriver Create(BrowserNames browserName)
        {
            var mode = (configuration?.WebDriver?.Mode ?? "").ToEnum <Modes>();

            Log.Info($"Browser mode:{mode}");
            switch (mode)
            {
            case Modes.browser:
                var isRemote = configuration?.WebDriver?.Browser?.IsRemote ?? false;
                Log.Info($"WebDriver.IsRemote = {isRemote}");
                if (isRemote)
                {
                    switch (browserName)
                    {
                    case BrowserNames.chrome:
                    {
                        ChromeOptions chromeOptions = BuildChromeOptions();
                        return(CreateRemoteWebDriver(chromeOptions.ToCapabilities()));
                    }

                    case BrowserNames.firefox:
                    {
                        FirefoxOptions firefoxOptions = BuildFirefoxOptions();
                        return(CreateRemoteWebDriver(firefoxOptions.ToCapabilities()));
                    }

                    case BrowserNames.opera:
                    {
                        OperaOptions operaOptions = BuildOperaOptions();
                        return(CreateRemoteWebDriver(operaOptions.ToCapabilities()));
                    }

                    case BrowserNames.safari:
                    {
                        SafariOptions safariOptions = BuildSafariOptions();
                        return(CreateRemoteWebDriver(safariOptions.ToCapabilities()));
                    }

                    case BrowserNames.ie:
                    {
                        InternetExplorerOptions ieOptions = BuildInternetExplorerOptions();
                        return(CreateRemoteWebDriver(ieOptions.ToCapabilities()));
                    }

                    case BrowserNames.edge:
                    {
                        EdgeOptions edgeOptions = BuildEdgeOptions();
                        return(CreateRemoteWebDriver(edgeOptions.ToCapabilities()));
                    }

                    default:
                        throw new ArgumentOutOfRangeException($"SpecDrill: Value Not Supported `{browserName}`!");
                    }
                }
                return(driverFactory[browserName]());

            case Modes.appium:

                AppiumOptions appiumOptions          = new AppiumOptions();
                var           configuredCapabilities = configuration?.WebDriver?.Appium?.Capabilities;
                ExtendCapabilities(appiumOptions, configuredCapabilities);

                IWebDriver   driver;
                const string PLATFORM_NAME = "platformName";
                EnsureCapabilityIsConfigured(configuredCapabilities, PLATFORM_NAME);
                var appiumServerUri = configuration?.WebDriver?.Appium?.ServerUri ?? "";
                switch (configuredCapabilities ![PLATFORM_NAME].ToString().ToEnum <PlatformNames>())
        private IWebDriver DoCreate(string key)
        {
            switch (key)
            {
            case "Firefox":
                var firefoxOptions = new FirefoxOptions {
                    AcceptInsecureCertificates = true
                };
                return(new FirefoxDriver(firefoxOptions));

            case "Internet Explorer":
            case "IE":
                var ieOptions =
                    new InternetExplorerOptions {
                    IntroduceInstabilityByIgnoringProtectedModeSettings = true
                };
                return(new InternetExplorerDriver(ieOptions));

            case "Chrome":
                var chromeOptions = new ChromeOptions();
                chromeOptions.AddUserProfilePreference("download.default_directory", TestingConstants.DownloadFilePath);
                if (!Directory.Exists(TestingConstants.DownloadFilePath))
                {
                    Directory.CreateDirectory(TestingConstants.DownloadFilePath);
                }

                chromeOptions.AddExcludedArgument("ignore-certificate-errors");
                chromeOptions.AddUserProfilePreference("credentials_enable_service", false);
                chromeOptions.AddUserProfilePreference("profile.password_manager_enabled", false);
                return(new ChromeDriver(chromeOptions));

            case "Safari":
                var options = new SafariOptions();
                options.AddAdditionalCapability(CapabilityType.BrowserName, "safari");
                options.AddAdditionalCapability(CapabilityType.PlatformName, "MAC");
                options.AddAdditionalCapability(CapabilityType.Version, "12");
                options.AddAdditionalCapability(CapabilityType.AcceptSslCertificates, true);
                options.AddAdditionalCapability(CapabilityType.IsJavaScriptEnabled, true);
                var capabilities = options.ToCapabilities();
                var driver       = new RemoteWebDriver(new Uri(Settings.RemoteServerAddress), capabilities, TimeSpan.FromSeconds(120));
                driver.Manage().Timeouts().ImplicitWait = Settings.PageTimeout;
                return(driver);

            case "ChromeOnAndroid":
                var androidCaps = new DesiredCapabilities();
                androidCaps.SetCapability("platformName", "Android");
                androidCaps.SetCapability("deviceName", Settings.DeviceName);
                androidCaps.SetCapability("browserName", MobileBrowserType.Chrome);
                androidCaps.SetCapability("timeouts", -1);
                androidCaps.SetCapability("download.prompt_for_download", false);
                // Dismiss the keyboard on the Android device
                androidCaps.SetCapability("unicodeKeyboard", true);
                androidCaps.SetCapability("resetKeyboard", true);
                androidCaps.SetCapability("clearSystemFiles", true);

                var androidDriver = new RemoteWebDriver(new Uri(Settings.RemoteServerAddress), androidCaps);
                androidDriver.Manage().Timeouts().ImplicitWait = Settings.PageTimeout;
                return(androidDriver);
            }

            throw new ArgumentException(@"Invalid browser key", nameof(key));
        }