public virtual void TestSetup()
 {
     //Start the service if needed
     AppiumServer.Start(TestEnvironmentParameters);
     //Set user provided options.
     MobileTestContext.Set(Constants.AppiumAdditionalOptionsKey, AdditionalCapabilities);
     Capabilities = new DriverCapabilities(TestEnvironmentParameters);
     //Merge user provided options to existing default capabilities.
     Capabilities.MergeCapabilities(MobileTestContext.Get <AdditionalDriverOptions>(Constants.AppiumAdditionalOptionsKey, false));
     // Write Runsettings to log file
     TestLogs.WriteLogSection("Original Test Run Parameters", () => TestLogs.Write(this.TestEnvironmentParameters.ToString()));
     MobileDriver.Initialize(Capabilities);
     //Write device configuration to log file
     TestLogs.WriteLogSection("DUT Configuration", () => TestLogs.Write(MobileDriver.Instance.Capabilities.ToString()));
     //Capture enviroment parameters for all futures uses.
     MobileTestContext.Set(Constants.TestEnvironmentKey, TestEnvironmentParameters);
     TestLogs.AddSection($"Test {TestContext.CurrentContext.Test.Name} Starts");
 }
        private static AppiumDriver <AppiumWebElement> InitializeDriver(DriverCapabilities capabilities)
        {
            AppiumOptions             caps = capabilities.GetDriverOptions();
            TestEnvironmentParameters TestRunParameters = capabilities.GetEnvironmentContext();
            int timeout = Convert.ToInt32(TestRunParameters.RS_DeviceReadyTimeout);

            Uri serverUri = TestRunParameters.ServerUri;

            if (TestRunParameters.RS_PlatformName.Equals("Android", StringComparison.OrdinalIgnoreCase))
            {
                return(GetDriver(() => new CustomAndroidDriver(serverUri, caps, TimeSpan.FromSeconds(timeout))));
            }
            if (TestRunParameters.RS_PlatformName.Equals("iOS", StringComparison.OrdinalIgnoreCase))
            {
                return(GetDriver(() => new CustomIOSDriver(serverUri, caps, TimeSpan.FromSeconds(timeout))));
            }
            throw new PlatformNotSupportedException($"[{TestRunParameters.RS_PlatformName}] platform is not supported.");
        }