public IWebDriver GetWebDriver(WebDriverParameters parameters) { IWebDriver Instance = null; // Create all desired capabilities var desiredCaps = new DesiredCapabilities(); foreach (var cap in parameters.capabilities) { desiredCaps.SetCapability(cap.Key, cap.GetValue()); } desiredCaps.SetCapability(CapabilityType.Platform, new Platform(GetPlatformTypeFromString(parameters.platform))); desiredCaps.SetCapability(CapabilityType.BrowserName, parameters.browserName); if (parameters.version != string.Empty) { desiredCaps.SetCapability(CapabilityType.Version, parameters.version); } // Attempt to instantiate the driver, catching the usual errors and providing more detailed info. try { Instance = new ScreenShotRemoteWebDriver(new Uri(parameters.hubUri), desiredCaps, TimeSpan.FromSeconds(parameters.commandTimeout)); // If we've specified a browser's height and width, set it - otherwise just maximize it. Hopefully we have consistent display resolution on our VM's. if (parameters.browserHeight != null && parameters.browserWidth != null) { Instance.Manage().Window.Size = new Size(parameters.browserWidth.GetValueOrDefault(), parameters.browserHeight.GetValueOrDefault()); } else { //Instance.Manage().Window.Maximize(); } } catch (Exception ex) { // If we don't know how to handle the exception better than Selenium, just pass it along. if (!(ex is WebDriverException || ex is InvalidOperationException)) { throw; } // But if we do... provide some more helpful messages and such. if (ex.Message.Contains("No connection could be made because the target machine actively refused it")) { throw new System.Net.WebException( "Target machine refused connection at " + parameters.hubUri + ". Check webDriverConfig remoteDriver settings and ensure server is reachable.", ex); } if (ex.Message.Contains("No enum const class org.openqa.selenium.Platform.")) { throw new System.InvalidCastException( "Invalid platform type: " + parameters.platform + ". Check webDriverConfig remoteDriver platform setting and ensure it is an exact match of a known enumeration within " + typeof(PlatformType).ToString(), ex); } if (ex.Message.Contains("Error forwarding the new session cannot find :")) { throw new ArgumentException( "No nodes have a browser that matches the requirements: Platform=" + parameters.platform + ", BrowserName=" + parameters.browserName + ", Version=" + parameters.version, ex); } throw; } return Instance; }
public IWebDriver GetWebDriver(WebDriverParameters parameters) { IWebDriver driver = null; var desiredCaps = new DesiredCapabilities(); foreach (var cap in parameters.capabilities) { desiredCaps.SetCapability(cap.Key, cap.GetValue()); } //desiredCaps.SetCapability(CapabilityType.Platform, new Platform(GetPlatformTypeFromString(parameters.platform))); //desiredCaps.SetCapability(CapabilityType.BrowserName, parameters.browserName); //if (parameters.version != string.Empty) //{ // desiredCaps.SetCapability(CapabilityType.Version, parameters.version); //} var ieOptions = new OpenQA.Selenium.IE.InternetExplorerOptions(); ieOptions.IgnoreZoomLevel = true; ieOptions.UnexpectedAlertBehavior = OpenQA.Selenium.IE.InternetExplorerUnexpectedAlertBehavior.Accept; var chromeOptions = new OpenQA.Selenium.Chrome.ChromeOptions(); chromeOptions.AddAdditionalCapability("unexpectedAlertBehaviour", "Accept"); switch (parameters.browserName.ToUpperInvariant()) { case "CHROME": driver = new OpenQA.Selenium.Chrome.ChromeDriver(chromeOptions); break; case "ANDROIDCHROME": driver = new OpenQA.Selenium.Chrome.ChromeDriver(chromeOptions); break; case "IE": driver = new OpenQA.Selenium.IE.InternetExplorerDriver(ieOptions); break; case "FIREFOX": driver = new OpenQA.Selenium.Firefox.FirefoxDriver(desiredCaps); break; } //driver.S(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR, UnexpectedAlertBehaviour.ACCEPT); return driver; }