예제 #1
0
        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);
            }
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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;
            }
        }
예제 #4
0
        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);
            }
        }
예제 #5
0
        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);
        }
예제 #6
0
        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);
        }
예제 #8
0
        private void ShutdownApp(ServicesCollection container)
        {
            DisposeDriverService.DisposeAndroid(container);
            DisposeDriverService.DisposeIOS(container);

            var currentAppConfiguration = container.Resolve <AppConfiguration>("_currentAppConfiguration");

            container.RegisterInstance(currentAppConfiguration, "_previousAppConfiguration");
        }
예제 #9
0
        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);
        }
예제 #10
0
        private void ResolvePreviousAppConfiguration(ServicesCollection childContainer)
        {
            var appConfiguration = new AppConfiguration();

            if (childContainer.IsRegistered <AppConfiguration>())
            {
                appConfiguration = childContainer.Resolve <AppConfiguration>();
            }

            childContainer.RegisterInstance(appConfiguration, "_previousAppConfiguration");
        }
예제 #11
0
        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>();
        }
예제 #12
0
 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;
     }
 }
예제 #13
0
        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;
            }
        }
예제 #14
0
        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");
        }
예제 #15
0
        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);
        }
예제 #17
0
        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;
            }
        }
예제 #18
0
        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);
        }
예제 #19
0
        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);
            }
        }
예제 #20
0
        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);
        }