private BrowserConfiguration GetCurrentBrowserConfiguration(MemberInfo memberInfo, Type testClassType, ServicesCollection container) { var browserAttribute = GetBrowserAttribute(memberInfo, testClassType); if (browserAttribute != null) { BrowserType currentBrowserType = browserAttribute.Browser; Lifecycle currentBrowserBehavior = browserAttribute.Lifecycle; bool shouldCaptureHttpTraffic = browserAttribute.ShouldCaptureHttpTraffic; Size currentBrowserSize = browserAttribute.Size; string classFullName = testClassType.FullName; ExecutionType executionType = browserAttribute.ExecutionType; bool shouldAutomaticallyScrollToVisible = browserAttribute.ShouldAutomaticallyScrollToVisible; var options = (browserAttribute as IDriverOptionsAttribute)?.CreateOptions(memberInfo, testClassType); var browserConfiguration = new BrowserConfiguration(executionType, currentBrowserBehavior, currentBrowserType, currentBrowserSize, classFullName, shouldCaptureHttpTraffic, shouldAutomaticallyScrollToVisible, options); container.RegisterInstance(browserConfiguration, "_currentBrowserConfiguration"); return(browserConfiguration); } else { container.RegisterInstance(default(BrowserConfiguration), "_currentBrowserConfiguration"); return(null); } }
private AppInitializationInfo GetCurrentAppConfiguration(MemberInfo memberInfo, Type testClassType, ServicesCollection container) { var appAttribute = GetAppAttribute(memberInfo, testClassType); if (appAttribute != null) { container.RegisterInstance(appAttribute.AppConfiguration, "_currentAppConfiguration"); appAttribute.AppConfiguration.ClassFullName = testClassType.FullName; return(appAttribute.AppConfiguration); } else { Lifecycle currentLifecycle = Parse <Lifecycle>(ConfigurationService.GetSection <DesktopSettings>().ExecutionSettings.DefaultLifeCycle); Size currentAppSize = default; if (!string.IsNullOrEmpty(ConfigurationService.GetSection <DesktopSettings>().ExecutionSettings.Resolution)) { currentAppSize = WindowsSizeResolver.GetWindowSize(ConfigurationService.GetSection <DesktopSettings>().ExecutionSettings.Resolution); } var appConfiguration = new AppInitializationInfo { AppPath = ConfigurationService.GetSection <DesktopSettings>().ExecutionSettings.DefaultAppPath, Lifecycle = currentLifecycle, Size = currentAppSize, AppiumOptions = new DesiredCapabilities(), ClassFullName = testClassType.FullName, }; InitializeGridOptionsFromConfiguration(appConfiguration.AppiumOptions, testClassType); InitializeCustomCodeOptions(appConfiguration.AppiumOptions, testClassType); container.RegisterInstance(appConfiguration, "_currentAppConfiguration"); return(appConfiguration); } }
public void StartBrowser(BrowserConfiguration browserConfiguration, ServicesCollection childContainer) { try { var wrappedWebDriver = WrappedWebDriverCreateService.Create(browserConfiguration); childContainer.RegisterInstance <IWebDriver>(wrappedWebDriver); childContainer.RegisterInstance(((RemoteWebDriver)wrappedWebDriver).SessionId.ToString(), "SessionId"); childContainer.RegisterInstance(ConfigurationService.GetSection <WebSettings>().ExecutionSettings.Url, "GridUri"); ////childContainer.RegisterInstance(new BrowserService(wrappedWebDriver)); ////childContainer.RegisterInstance(new CookiesService(wrappedWebDriver)); ////childContainer.RegisterInstance(new DialogService(wrappedWebDriver)); ////childContainer.RegisterInstance(new JavaScriptService(wrappedWebDriver)); ////childContainer.RegisterInstance(new InteractionsService(wrappedWebDriver)); ////childContainer.RegisterInstance(new NavigationService(wrappedWebDriver)); ////childContainer.RegisterInstance(new ComponentCreateService()); childContainer.RegisterInstance <IWebDriverElementFinderService>(new NativeElementFinderService(wrappedWebDriver)); childContainer.RegisterNull <int?>(); childContainer.RegisterNull <IWebElement>(); IsBrowserStartedCorrectly = true; } catch { IsBrowserStartedCorrectly = false; throw; } }
private AppInitializationInfo GetCurrentAppConfiguration(MemberInfo memberInfo, Type testClassType, ServicesCollection container) { var appAttribute = GetAppAttribute(memberInfo, testClassType); if (appAttribute != null) { container.RegisterInstance(appAttribute.AppConfiguration, "_currentAppConfiguration"); appAttribute.AppConfiguration.ClassFullName = testClassType.FullName; return(appAttribute.AppConfiguration); } else { container.RegisterInstance(default(AppInitializationInfo), "_currentAppConfiguration"); return(null); } }
private void RestartBrowser(ServicesCollection container) { var currentBrowserConfiguration = container.Resolve <BrowserConfiguration>("_currentBrowserConfiguration"); ShutdownBrowser(container); // Register the ExecutionEngine that should be used for the current run. Will be used in the next test as PreviousEngineType. var testExecutionEngine = new TestExecutionEngine(); container.RegisterInstance(testExecutionEngine); // Register the Browser type that should be used for the current run. Will be used in the next test as PreviousBrowserType. container.RegisterInstance(currentBrowserConfiguration); // Start the current engine with current browser type. testExecutionEngine.StartBrowser(currentBrowserConfiguration, container); }
private void RestartApp(ServicesCollection container) { var currentAppConfiguration = container.Resolve <AppConfiguration>("_currentAppConfiguration"); ShutdownApp(container); // Register the ExecutionEngine that should be used for the current run. Will be used in the next test as PreviousEngineType. var testExecutionEngine = new TestExecutionEngine(); container.RegisterInstance(testExecutionEngine); // Register the app that should be used for the current run. Will be used in the next test as PreviousappType. container.RegisterInstance(currentAppConfiguration); // Start the current engine testExecutionEngine.StartApp(currentAppConfiguration, container); }
private void RestartBrowser(ServicesCollection container) { if (_previousBrowserConfiguration.BrowserType != BrowserType.NotSet) // NotSet = initial browser start { ShutdownBrowser(container); } // Register the ExecutionEngine that should be used for the current run. Will be used in the next test as PreviousEngineType. var testExecutionEngine = new TestExecutionEngine(); container.RegisterInstance(testExecutionEngine); // Register the Browser type that should be used for the current run. Will be used in the next test as PreviousBrowserType. container.RegisterInstance(_currentBrowserConfiguration); // Start the current engine with current browser type. testExecutionEngine.StartBrowser(_currentBrowserConfiguration, container); }
private void ShutdownApp(ServicesCollection container) { DisposeDriverService.DisposeAndroid(container); DisposeDriverService.DisposeIOS(container); var currentAppConfiguration = container.Resolve <AppConfiguration>("_currentAppConfiguration"); container.RegisterInstance(currentAppConfiguration, "_previousAppConfiguration"); }
public static AndroidDriver <AndroidElement> CreateAndroidDriver(AppConfiguration appConfiguration, ServicesCollection childContainer) { var driverOptions = childContainer.Resolve <AppiumOptions>(appConfiguration.ClassFullName) ?? appConfiguration.AppiumOptions; driverOptions = driverOptions ?? new AppiumOptions(); AddAdditionalOptions(driverOptions, MobileCapabilityType.App, appConfiguration.AppPath); AddAdditionalOptions(driverOptions, MobileCapabilityType.DeviceName, appConfiguration.DeviceName); AddAdditionalOptions(driverOptions, MobileCapabilityType.PlatformName, appConfiguration.PlatformName); AddAdditionalOptions(driverOptions, MobileCapabilityType.PlatformVersion, appConfiguration.PlatformVersion); if (string.IsNullOrEmpty(appConfiguration.BrowserName)) { AddAdditionalOptions(driverOptions, AndroidMobileCapabilityType.AppPackage, appConfiguration.AppPackage); AddAdditionalOptions(driverOptions, AndroidMobileCapabilityType.AppActivity, appConfiguration.AppActivity); } else { AddAdditionalOptions(driverOptions, MobileCapabilityType.BrowserName, appConfiguration.BrowserName); } var wrappedWebDriver = default(AndroidDriver <AndroidElement>); if (_shouldStartAppiumLocalService) { if (AppiumLocalService == null) { throw new ArgumentException("The Appium local service is not started. You need to call App?.StartAppiumLocalService() in AssemblyInitialize method."); } wrappedWebDriver = new AndroidDriver <AndroidElement>(AppiumLocalService, driverOptions); } else { wrappedWebDriver = new AndroidDriver <AndroidElement>(new Uri(_appiumServiceUrl), driverOptions); } wrappedWebDriver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(ConfigurationService.GetSection <MobileSettings>().TimeoutSettings.ImplicitWaitTimeout); childContainer.RegisterInstance <IWebDriver>(wrappedWebDriver); childContainer.RegisterInstance(childContainer.Resolve <BrowserService>()); childContainer.RegisterInstance(childContainer.Resolve <CookiesService>()); childContainer.RegisterInstance(childContainer.Resolve <DialogService>()); childContainer.RegisterInstance(childContainer.Resolve <JavaScriptService>()); childContainer.RegisterInstance(childContainer.Resolve <NavigationService>()); childContainer.RegisterInstance(childContainer.Resolve <ComponentCreateService>()); var webDriver = childContainer.Resolve <IWebDriver>(); childContainer.RegisterInstance <IWebDriverElementFinderService>(new NativeElementFinderService(webDriver)); childContainer.RegisterNull <int?>(); childContainer.RegisterNull <IWebElement>(); return(wrappedWebDriver); }
private void ResolvePreviousAppConfiguration(ServicesCollection childContainer) { var appConfiguration = new AppConfiguration(); if (childContainer.IsRegistered <AppConfiguration>()) { appConfiguration = childContainer.Resolve <AppConfiguration>(); } childContainer.RegisterInstance(appConfiguration, "_previousAppConfiguration"); }
private void ShutdownApp(ServicesCollection container) { DisposeDriverService.Dispose(container); var appConfiguration = new AppInitializationInfo(); // BUG: If we use ReuseIfStarted, there is a new child container for each class and when // we initialize a new childcontainer the _previousAppConfiguration is missing and the app // is still opened. Probably this won't work in parallel. container.RegisterInstance(appConfiguration, "_previousAppConfiguration"); ////container.UnregisterSingleInstance<TestExecutionEngine>(); }
public void StartApp(AppInitializationInfo appConfiguration, ServicesCollection childContainer) { try { var wrappedWebDriver = WrappedWebDriverCreateService.Create(appConfiguration, childContainer); childContainer.RegisterInstance(wrappedWebDriver); childContainer.RegisterInstance(new AppService(wrappedWebDriver)); childContainer.RegisterInstance(new ElementCreateService()); childContainer.RegisterNull <int?>(); childContainer.RegisterNull <IWebElement>(); childContainer.RegisterNull <WindowsElement>(); IsAppStartedCorrectly = true; } catch (Exception e) { Console.WriteLine(e); IsAppStartedCorrectly = false; throw; } }
public void StartBrowser(BrowserConfiguration browserConfiguration, ServicesCollection childContainer) { try { var wrappedWebDriver = WrappedWebDriverCreateService.Create(browserConfiguration); childContainer.RegisterInstance <IWebDriver>(wrappedWebDriver); childContainer.RegisterInstance(((WebDriver)wrappedWebDriver).SessionId.ToString(), "SessionId"); childContainer.RegisterInstance(ConfigurationService.GetSection <WebSettings>().ExecutionSettings.Url, "GridUri"); childContainer.RegisterInstance <IWebDriverElementFinderService>(new NativeElementFinderService(wrappedWebDriver)); childContainer.RegisterNull <int?>(); childContainer.RegisterNull <IWebElement>(); IsBrowserStartedCorrectly = true; } catch (Exception ex) { DebugInformation.PrintStackTrace(ex); IsBrowserStartedCorrectly = false; throw; } }
private void ResolvePreviousBrowserType(ServicesCollection container) { bool shouldScrollToVisible = ConfigurationService.GetSection <WebSettings>().ShouldAutomaticallyScrollToVisible; var browserConfiguration = new BrowserConfiguration(BrowserType.NotSet, false, shouldScrollToVisible); if (container.IsRegistered <BrowserConfiguration>()) { browserConfiguration = container.Resolve <BrowserConfiguration>(); } container.RegisterInstance(browserConfiguration, "_previousBrowserConfiguration"); }
private void ShutdownBrowser(ServicesCollection container) { // Disposing existing engine call only dispose if in parallel. var previousTestExecutionEngine = container.Resolve <TestExecutionEngine>(); previousTestExecutionEngine?.DisposeAll(); bool shouldScrollToVisible = ConfigurationService.GetSection <WebSettings>().ShouldAutomaticallyScrollToVisible; var browserConfiguration = new BrowserConfiguration(BrowserType.NotSet, false, shouldScrollToVisible); container.RegisterInstance(browserConfiguration, "_previousBrowserConfiguration"); container.UnregisterSingleInstance <TestExecutionEngine>(); }
public static IOSDriver <IOSElement> CreateIOSDriver(AppConfiguration appConfiguration, ServicesCollection childContainer) { var driverOptions = childContainer.Resolve <AppiumOptions>(appConfiguration.ClassFullName) ?? appConfiguration.AppiumOptions; driverOptions.AddAdditionalCapability(MobileCapabilityType.App, appConfiguration.AppPath); driverOptions.AddAdditionalCapability(MobileCapabilityType.DeviceName, appConfiguration.DeviceName); driverOptions.AddAdditionalCapability(MobileCapabilityType.PlatformName, appConfiguration.PlatformName); driverOptions.AddAdditionalCapability(MobileCapabilityType.PlatformVersion, appConfiguration.PlatformVersion); driverOptions.AddAdditionalCapability(MobileCapabilityType.AutomationName, "XCUITest"); IOSDriver <IOSElement> wrappedWebDriver; if (_shouldStartAppiumLocalService) { if (AppiumLocalService == null) { throw new ArgumentException("The Appium local service is not started. You need to call App?.StartAppiumLocalService() in AssemblyInitialize method."); } wrappedWebDriver = new IOSDriver <IOSElement>(AppiumLocalService, driverOptions); } else { wrappedWebDriver = new IOSDriver <IOSElement>(new Uri(_appiumServiceUrl), driverOptions); } wrappedWebDriver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(180); childContainer.RegisterInstance(wrappedWebDriver); childContainer.RegisterInstance <IWebDriver>(wrappedWebDriver); childContainer.RegisterInstance(childContainer.Resolve <BrowserService>()); childContainer.RegisterInstance(childContainer.Resolve <CookiesService>()); childContainer.RegisterInstance(childContainer.Resolve <DialogService>()); childContainer.RegisterInstance(childContainer.Resolve <JavaScriptService>()); childContainer.RegisterInstance(childContainer.Resolve <NavigationService>()); childContainer.RegisterInstance(childContainer.Resolve <ElementCreateService>()); var webDriver = childContainer.Resolve <IWebDriver>(); childContainer.RegisterInstance <IWebDriverElementFinderService>(new NativeElementFinderService(webDriver)); childContainer.RegisterNull <int?>(); childContainer.RegisterNull <IWebElement>(); return(wrappedWebDriver); }
public void StartApp(AppConfiguration appConfiguration, ServicesCollection childContainer) { try { if (appConfiguration.MobileOSType.Equals(MobileOSType.Android)) { var wrappedWebDriver = WrappedAppiumCreateService.CreateAndroidDriver(appConfiguration, childContainer); childContainer.RegisterInstance(wrappedWebDriver); try { wrappedWebDriver.HideKeyboard(); } catch { // ignore } } else { WrappedAppiumCreateService.CreateIOSDriver(appConfiguration, childContainer); } childContainer.RegisterInstance(childContainer.Resolve <ElementCreateService>()); childContainer.RegisterNull <int?>(); childContainer.RegisterNull <IWebElement>(); childContainer.RegisterNull <AndroidElement>(); childContainer.RegisterNull <IOSElement>(); IsAppStartedCorrectly = true; } catch (Exception e) { Console.WriteLine(e); Telemetry.Instance.TrackException(e); IsAppStartedCorrectly = false; throw; } }
private AppConfiguration GetCurrentAppConfiguration(MemberInfo memberInfo, Type testClassType, ServicesCollection container) { var currentAppConfiguration = default(AppConfiguration); var androidAttribute = GetAppAttribute <AndroidAttribute>(memberInfo, testClassType); var iosAttribute = GetAppAttribute <IOSAttribute>(memberInfo, testClassType); var androidWebAttribute = GetAppAttribute <AndroidWebAttribute>(memberInfo, testClassType); var androidSauceLabsAttribute = GetAppAttribute <AndroidSauceLabsAttribute>(memberInfo, testClassType); var androidCrossappTestingAttribute = GetAppAttribute <AndroidCrossBrowserTestingAttribute>(memberInfo, testClassType); var androidappStackAttribute = GetAppAttribute <AndroidBrowserStackAttribute>(memberInfo, testClassType); var iosWebAttribute = GetAppAttribute <IOSWebAttribute>(memberInfo, testClassType); var iosSauceLabsAttribute = GetAppAttribute <IOSSauceLabsAttribute>(memberInfo, testClassType); var iosCrossappTestingAttribute = GetAppAttribute <IOSCrossBrowserTestingAttribute>(memberInfo, testClassType); var iosappStackAttribute = GetAppAttribute <IOSBrowserStackAttribute>(memberInfo, testClassType); if (androidAttribute != null && iosAttribute != null) { throw new ArgumentException("You need to specify only single platform attribute - Android or IOS."); } else if (androidAttribute != null) { currentAppConfiguration = androidAttribute.AppConfiguration; } else if (androidWebAttribute != null) { currentAppConfiguration = androidWebAttribute.AppConfiguration; } else if (androidSauceLabsAttribute != null) { currentAppConfiguration = androidSauceLabsAttribute.AppConfiguration; currentAppConfiguration.AppiumOptions = androidSauceLabsAttribute.CreateAppiumOptions(memberInfo, testClassType); } else if (androidCrossappTestingAttribute != null) { currentAppConfiguration = androidCrossappTestingAttribute.AppConfiguration; currentAppConfiguration.AppiumOptions = androidCrossappTestingAttribute.CreateAppiumOptions(memberInfo, testClassType); } else if (androidappStackAttribute != null) { currentAppConfiguration = androidappStackAttribute.AppConfiguration; currentAppConfiguration.AppiumOptions = androidappStackAttribute.CreateAppiumOptions(memberInfo, testClassType); } else if (iosAttribute != null) { currentAppConfiguration = iosAttribute.AppConfiguration; } else if (iosWebAttribute != null) { currentAppConfiguration = iosWebAttribute.AppConfiguration; } else if (iosSauceLabsAttribute != null) { currentAppConfiguration = iosSauceLabsAttribute.AppConfiguration; currentAppConfiguration.AppiumOptions = iosSauceLabsAttribute.CreateAppiumOptions(memberInfo, testClassType); } else if (iosCrossappTestingAttribute != null) { currentAppConfiguration = iosCrossappTestingAttribute.AppConfiguration; currentAppConfiguration.AppiumOptions = iosCrossappTestingAttribute.CreateAppiumOptions(memberInfo, testClassType); } else if (iosappStackAttribute != null) { currentAppConfiguration = iosappStackAttribute.AppConfiguration; currentAppConfiguration.AppiumOptions = iosappStackAttribute.CreateAppiumOptions(memberInfo, testClassType); } else { throw new ArgumentException("To run BELLATRIX mobile tests you need to add Android or IOS attributes over your test class."); } container.RegisterInstance(currentAppConfiguration, "_currentAppConfiguration"); return(currentAppConfiguration); }
private BrowserConfiguration GetCurrentBrowserConfiguration(MemberInfo memberInfo, Type testClassType, ServicesCollection container, List <object> arguments) { var browserAttribute = GetBrowserAttribute(memberInfo, testClassType); string fullClassName = testClassType.FullName; if (browserAttribute != null) { BrowserType currentBrowserType = browserAttribute.Browser; Lifecycle currentLifecycle = browserAttribute.Lifecycle; bool shouldCaptureHttpTraffic = browserAttribute.ShouldCaptureHttpTraffic; bool shouldAutomaticallyScrollToVisible = browserAttribute.ShouldAutomaticallyScrollToVisible; Size currentBrowserSize = browserAttribute.Size; ExecutionType executionType = browserAttribute.ExecutionType; var options = (browserAttribute as IDriverOptionsAttribute)?.CreateOptions(memberInfo, testClassType) ?? GetDriverOptionsBasedOnBrowser(currentBrowserType, testClassType); InitializeCustomCodeOptions(options, testClassType); var browserConfiguration = new BrowserConfiguration(executionType, currentLifecycle, currentBrowserType, currentBrowserSize, fullClassName, shouldCaptureHttpTraffic, shouldAutomaticallyScrollToVisible, options); container.RegisterInstance(browserConfiguration, "_currentBrowserConfiguration"); return(browserConfiguration); } else { BrowserType currentBrowserType = Parse <BrowserType>(ConfigurationService.GetSection <WebSettings>().ExecutionSettings.DefaultBrowser); if (arguments != null & arguments.Any()) { if (arguments[0] is BrowserType) { currentBrowserType = (BrowserType)arguments[0]; } } Lifecycle currentLifecycle = Parse <Lifecycle>(ConfigurationService.GetSection <WebSettings>().ExecutionSettings.DefaultLifeCycle); Size currentBrowserSize = default; if (!string.IsNullOrEmpty(ConfigurationService.GetSection <WebSettings>().ExecutionSettings.Resolution)) { currentBrowserSize = WindowsSizeResolver.GetWindowSize(ConfigurationService.GetSection <WebSettings>().ExecutionSettings.Resolution); } ExecutionType executionType = ConfigurationService.GetSection <WebSettings>().ExecutionSettings.ExecutionType.ToLower() == "regular" ? ExecutionType.Regular : ExecutionType.Grid; bool shouldCaptureHttpTraffic = ConfigurationService.GetSection <WebSettings>().ShouldCaptureHttpTraffic; bool shouldAutomaticallyScrollToVisible = ConfigurationService.GetSection <WebSettings>().ShouldAutomaticallyScrollToVisible; var options = GetDriverOptionsBasedOnBrowser(currentBrowserType, testClassType); if (!string.IsNullOrEmpty(ConfigurationService.GetSection <WebSettings>().ExecutionSettings.BrowserVersion)) { options.BrowserVersion = ConfigurationService.GetSection <WebSettings>().ExecutionSettings.BrowserVersion; } if (arguments != null & arguments.Count >= 2) { if (arguments[0] is BrowserType && arguments[1] is int) { options.BrowserVersion = arguments[1].ToString(); } } InitializeGridOptionsFromConfiguration(options, testClassType); InitializeCustomCodeOptions(options, testClassType); var browserConfiguration = new BrowserConfiguration(executionType, currentLifecycle, currentBrowserType, currentBrowserSize, fullClassName, shouldCaptureHttpTraffic, shouldAutomaticallyScrollToVisible, options); container.RegisterInstance(browserConfiguration, "_currentBrowserConfiguration"); return(browserConfiguration); } }
private AppConfiguration GetCurrentAppConfiguration(MemberInfo memberInfo, Type testClassType, ServicesCollection container) { var androidAttribute = GetAppAttribute <AndroidAttribute>(memberInfo, testClassType); var iosAttribute = GetAppAttribute <IOSAttribute>(memberInfo, testClassType); var androidWebAttribute = GetAppAttribute <AndroidWebAttribute>(memberInfo, testClassType); var androidSauceLabsAttribute = GetAppAttribute <AndroidSauceLabsAttribute>(memberInfo, testClassType); var androidCrossappTestingAttribute = GetAppAttribute <AndroidCrossBrowserTestingAttribute>(memberInfo, testClassType); var androidappStackAttribute = GetAppAttribute <AndroidBrowserStackAttribute>(memberInfo, testClassType); var iosWebAttribute = GetAppAttribute <IOSWebAttribute>(memberInfo, testClassType); var iosSauceLabsAttribute = GetAppAttribute <IOSSauceLabsAttribute>(memberInfo, testClassType); var iosCrossappTestingAttribute = GetAppAttribute <IOSCrossBrowserTestingAttribute>(memberInfo, testClassType); var iosappStackAttribute = GetAppAttribute <IOSBrowserStackAttribute>(memberInfo, testClassType); AppConfiguration currentAppConfiguration; if (androidAttribute != null && iosAttribute != null) { throw new ArgumentException("You need to specify only single platform attribute - Android or IOS."); } else if (androidAttribute != null) { currentAppConfiguration = androidAttribute.AppConfiguration; } else if (androidWebAttribute != null) { currentAppConfiguration = androidWebAttribute.AppConfiguration; } else if (androidSauceLabsAttribute != null) { currentAppConfiguration = androidSauceLabsAttribute.AppConfiguration; currentAppConfiguration.AppiumOptions = androidSauceLabsAttribute.CreateAppiumOptions(memberInfo, testClassType); } else if (androidCrossappTestingAttribute != null) { currentAppConfiguration = androidCrossappTestingAttribute.AppConfiguration; currentAppConfiguration.AppiumOptions = androidCrossappTestingAttribute.CreateAppiumOptions(memberInfo, testClassType); } else if (androidappStackAttribute != null) { currentAppConfiguration = androidappStackAttribute.AppConfiguration; currentAppConfiguration.AppiumOptions = androidappStackAttribute.CreateAppiumOptions(memberInfo, testClassType); } else if (iosAttribute != null) { currentAppConfiguration = iosAttribute.AppConfiguration; } else if (iosWebAttribute != null) { currentAppConfiguration = iosWebAttribute.AppConfiguration; } else if (iosSauceLabsAttribute != null) { currentAppConfiguration = iosSauceLabsAttribute.AppConfiguration; currentAppConfiguration.AppiumOptions = iosSauceLabsAttribute.CreateAppiumOptions(memberInfo, testClassType); } else if (iosCrossappTestingAttribute != null) { currentAppConfiguration = iosCrossappTestingAttribute.AppConfiguration; currentAppConfiguration.AppiumOptions = iosCrossappTestingAttribute.CreateAppiumOptions(memberInfo, testClassType); } else if (iosappStackAttribute != null) { currentAppConfiguration = iosappStackAttribute.AppConfiguration; currentAppConfiguration.AppiumOptions = iosappStackAttribute.CreateAppiumOptions(memberInfo, testClassType); } else { // TODO: --> add Test Case attribute for Andoid and IOS? Extend the Test Case attribute? Lifecycle currentLifecycle = Parse <Lifecycle>(ConfigurationService.GetSection <MobileSettings>().ExecutionSettings.DefaultLifeCycle); var appConfiguration = new AppConfiguration { AppPath = ConfigurationService.GetSection <MobileSettings>().ExecutionSettings.DefaultAppPath, Lifecycle = currentLifecycle, AppiumOptions = new AppiumOptions(), ClassFullName = testClassType.FullName, }; InitializeGridOptionsFromConfiguration(appConfiguration.AppiumOptions, testClassType); InitializeCustomCodeOptions(appConfiguration.AppiumOptions, testClassType); container.RegisterInstance(appConfiguration, "_currentAppConfiguration"); return(appConfiguration); } container.RegisterInstance(currentAppConfiguration, "_currentAppConfiguration"); return(currentAppConfiguration); }