/// <summary> /// To be called from concrete test fixtures to initialize the test run. /// </summary> protected static AppiumDriver <IWebElement> InitializeDriver() { try { Trace.Listeners.Add(new TextWriterTraceListener("AppiumTestCaseExecution.log", "appiumTestCaseListener")); ExecutionErrors = new List <ExecutionError>(); BaseProjectPath = Path.GetFullPath(Path.Combine(TestRunLocation, @"..\..\..\")); SensitiveInformation.GetHostAndCredentials(BaseProjectPath, out Host, out Username, out Password); ParameterRetriever testParams = new ParameterRetriever(); PerfectoTestingParameters = testParams.GetVSOExecParam(BaseProjectPath, false); CurrentDevice = PerfectoTestingParameters.Devices.FirstOrDefault(); if (string.IsNullOrEmpty(CurrentDevice.DeviceDetails.RunIdentifier)) { CurrentDevice.DeviceDetails.RunIdentifier = string.Format("{0:yyyy-MM-dd_hh-mm-ss-tt}", DateTime.Now); } CheckForValidDeviceConfiguration(); Trace.Listeners.Add(new ConsoleTraceListener()); Trace.AutoFlush = true; var runMessage = string.Format("Starting test runs for {0} with RunId of {1}", CurrentDevice.DeviceDetails.Name, CurrentDevice.DeviceDetails.RunIdentifier); Trace.WriteLine(runMessage); DesiredCapabilities capabilities = new DesiredCapabilities(); capabilities.SetCapability("automationName", "Appium"); capabilities.SetCapability("user", Username); capabilities.SetCapability("password", Password); capabilities.SetCapability("newCommandTimeout", "120"); capabilities.SetPerfectoLabExecutionId(Host); capabilities.SetCapability("deviceName", CurrentDevice.DeviceDetails.DeviceID); capabilities.SetCapability("scriptName", "Parallel-" + TestCaseName); if (AppSettingsRetriever.IsWindTunnelEnabled()) { capabilities.SetCapability("windTunnelPersona", "Georgia"); } var url = new Uri(string.Format("http://{0}/nexperience/perfectomobile/wd/hub", Host)); if (CurrentDevice.DeviceDetails.OS.ToUpperInvariant() == "IOS") { DriverInstance = new IOSDriver <IWebElement>(url, capabilities, new TimeSpan(0, 2, 0)); } else if (CurrentDevice.DeviceDetails.OS.ToUpperInvariant() == "ANDROID") { DriverInstance = new AndroidDriver <IWebElement>(url, capabilities, new TimeSpan(0, 2, 0)); } else { throw new ArgumentException("Unknown Device OS from config file: " + CurrentDevice.DeviceDetails.OS); } startedVitals.Add("outputs.monitors.cpu.total"); startedVitals.Add("outputs.monitors.memory.used"); StartVitals(1, startedVitals); DriverInstance.Context = "NATIVE_APP"; CloseApp(); OpenApp(); DriverInstance.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(15)); return(DriverInstance); } catch (Exception ex) { var message = string.Format("Failed to aqcuire new driver instance for {0} with message {1} and stacktrace {2}", CurrentDevice, ex.Message, ex.StackTrace); Console.WriteLine(message); throw new Exception(message, ex); } }
/// <summary> /// To be called from concrete test fixtures to initialize the test run. /// </summary> protected static RemoteWebDriverExtended InitializeDriver() { string model = "Unknown device model"; try { Trace.Listeners.Add(new TextWriterTraceListener("webTestCaseExecution.log", "webTestCaseListener")); ExecutionErrors = new List <ExecutionError>(); BaseProjectPath = Path.GetFullPath(Path.Combine(TestRunLocation, @"..\..\..\")); SensitiveInformation.GetHostAndCredentials(BaseProjectPath, out Host, out Username, out Password); ParameterRetriever testParams = new ParameterRetriever(); PerfectoTestingParameters = testParams.GetVSOExecParam(BaseProjectPath, false); CurrentDevice = PerfectoTestingParameters.Devices.FirstOrDefault(); if (string.IsNullOrEmpty(CurrentDevice.DeviceDetails.RunIdentifier)) { CurrentDevice.DeviceDetails.RunIdentifier = string.Format("{0:yyyy-MM-dd_hh-mm-ss-tt}", DateTime.Now); } CheckForValidConfiguration(); model = CurrentDevice.DeviceDetails.Name ?? "Unknown device Model"; Trace.Listeners.Add(new ConsoleTraceListener()); Trace.AutoFlush = true; var browserName = "mobileOS"; if (CurrentDevice.DeviceDetails.IsDesktopBrowser) { browserName = CurrentDevice.DeviceDetails.BrowserName; } DesiredCapabilities capabilities = new DesiredCapabilities(browserName, string.Empty, new Platform(PlatformType.Any)); capabilities.SetCapability("user", Username); capabilities.SetCapability("password", Password); capabilities.SetCapability("newCommandTimeout", "120"); capabilities.SetPerfectoLabExecutionId(Host); capabilities.SetCapability("scriptName", "Parallel-" + TestCaseName); if (CurrentDevice.DeviceDetails.IsDesktopBrowser) { capabilities.SetCapability("platformName", CurrentDevice.DeviceDetails.OS); capabilities.SetCapability("platformVersion", CurrentDevice.DeviceDetails.OSVersion); capabilities.SetCapability("browserName", CurrentDevice.DeviceDetails.BrowserName); capabilities.SetCapability("resolution", "1366x768"); capabilities.SetCapability("version", CurrentDevice.DeviceDetails.BrowserVersion); } else { capabilities.SetCapability("deviceName", CurrentDevice.DeviceDetails.DeviceID); //WindTunnel only for devices and only when available if (AppSettingsRetriever.IsWindTunnelEnabled()) { capabilities.SetCapability("windTunnelPersona", "Georgia"); } } var url = new Uri(string.Format("https://{0}/nexperience/perfectomobile/wd/hub", Host)); RemoteWebDriverExtended driver = new RemoteWebDriverExtended(url, capabilities, new TimeSpan(0, 2, 0)); driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(15)); DriverInstance = driver; startedVitals.Add("outputs.monitors.cpu.total"); startedVitals.Add("outputs.monitors.memory.used"); StartVitals(1, startedVitals); return(driver); } catch (Exception e) { HandleGeneralException(e, DriverInstance); } return(null); }