/// <summary> /// Creates and starts the test application. /// </summary> /// <remarks> /// Depending on the AutomatedApplicationType /// this can be on the same thread or on a separate thread. /// </remarks> public override void Start() { if (IsApplicationRunning) { throw new InvalidOperationException("Cannot start an application instance if it is already running."); } IsApplicationRunning = true; if (ApplicationSettings.InProcessApplicationType == InProcessApplicationType.InProcessSeparateThread || ApplicationSettings.InProcessApplicationType == InProcessApplicationType.InProcessSeparateThreadAndAppDomain) { var mainApplicationThread = new Thread(ApplicationStartWorker); mainApplicationThread.SetApartmentState(ApartmentState.STA); mainApplicationThread.Start(); } else if (ApplicationSettings.InProcessApplicationType == InProcessApplicationType.InProcessSameThread) { ApplicationImplementation = ApplicationSettings.ApplicationImplementationFactory.Create(ApplicationSettings, null); ApplicationImplementation.MainWindowOpened += this.OnMainWindowOpened; ApplicationImplementation.Exited += this.OnExit; ApplicationImplementation.FocusChanged += this.OnFocusChanged; ApplicationImplementation.Start(); } else { throw new InvalidOperationException(string.Format( CultureInfo.CurrentCulture, "Unable to start automated application with AutomatedApplicationType: {0}", ApplicationSettings.InProcessApplicationType)); } }
/// <summary> /// Thread worker that creates the AutomatedApplication implementation and /// starts the application. If InProcessSeparateThreadAndAppDomain is specified /// then the AutomatedApplication implementation is created in a new AppDomain. /// </summary> private void ApplicationStartWorker() { AppDomain testAppDomain = null; if (ApplicationSettings.InProcessApplicationType == InProcessApplicationType.InProcessSeparateThreadAndAppDomain) { var setup = new AppDomainSetup(); setup.ApplicationBase = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); testAppDomain = AppDomain.CreateDomain("Automated Application Domain", null, setup); ApplicationImplementation = ApplicationSettings.ApplicationImplementationFactory.Create(ApplicationSettings, testAppDomain); } else { ApplicationImplementation = ApplicationSettings.ApplicationImplementationFactory.Create(ApplicationSettings, null); } ApplicationImplementation.MainWindowOpened += this.OnMainWindowOpened; ApplicationImplementation.Exited += this.OnExit; ApplicationImplementation.FocusChanged += this.OnFocusChanged; ApplicationImplementation.Start(); if (testAppDomain != null) { // run has completed, now unload this appdomain AppDomain.Unload(testAppDomain); testAppDomain = null; ApplicationImplementation = null; } }
/// <summary> /// Waits for the test application to enter an idle state. /// </summary> /// <remarks> /// Blocks execution of the current thread until the window is displayed /// or until the specified timeout interval elapses. /// </remarks> /// <param name="timeout">The timeout interval.</param> public void WaitForInputIdle(TimeSpan timeout) { if (!IsApplicationRunning) { return; } ApplicationImplementation.WaitForInputIdle(timeout); }
/// <summary> /// Waits for the test application to display a window with a specified name. /// </summary> /// <remarks> /// Blocks execution of the current thread until the window is displayed /// or until the specified timeout interval elapses. /// </remarks> /// <param name="windowName">The window to wait for.</param> /// <param name="timeout">The timeout interval.</param> public void WaitForWindow(string windowName, TimeSpan timeout) { if (!IsApplicationRunning) { return; } ApplicationImplementation.WaitForWindow(windowName, timeout); }
/// <summary> /// Closes the automated application gracefully. /// </summary> public virtual void Close() { if (ApplicationImplementation != null) { ApplicationImplementation.MainWindowOpened -= this.OnMainWindowOpened; ApplicationImplementation.FocusChanged -= this.OnFocusChanged; ApplicationImplementation.Close(); ApplicationImplementation = null; } IsApplicationRunning = false; }
/// <summary> /// Creates and starts the automated application. /// </summary> public override void Start() { if (IsApplicationRunning) { throw new InvalidOperationException("Cannot start an application instance if it is already running."); } IsApplicationRunning = true; ApplicationImplementation = ApplicationSettings.ApplicationImplementationFactory.Create(ApplicationSettings, null); ApplicationImplementation.MainWindowOpened += this.OnMainWindowOpened; ApplicationImplementation.FocusChanged += this.OnFocusChanged; ApplicationImplementation.Exited += this.OnExit; ApplicationImplementation.Start(); }
/// <summary> /// Waits for the test application to display its main window. /// </summary> /// <remarks> /// Blocks execution of the current thread until the window is displayed /// or until the specified timeout interval elapses. /// </remarks> /// <param name="timeout">The timeout interval.</param> public void WaitForMainWindow(TimeSpan timeout) { if (!IsApplicationRunning) { return; } TimeSpan zero = TimeSpan.FromMilliseconds(0); TimeSpan delta = TimeSpan.FromMilliseconds(10); // must first wait for for AutomatedAppImp to be initialized while (ApplicationImplementation == null && timeout > zero) { Thread.Sleep(10); timeout -= delta; } if (ApplicationImplementation != null) { // then do the wait implementation ApplicationImplementation.WaitForMainWindow(timeout); } }
/// <summary> /// Thread worker that creates the AutomatedApplication implementation and /// starts the application. If InProcessSeparateThreadAndAppDomain is specified /// then the AutomatedApplication implementation is created in a new AppDomain. /// </summary> private void ApplicationStartWorker() { AppDomain testAppDomain = null; // ApplicationImplementation = ApplicationSettings.ApplicationImplementationFactory.Create(ApplicationSettings, null); //} ApplicationImplementation.MainWindowOpened += this.OnMainWindowOpened; ApplicationImplementation.Exited += this.OnExit; ApplicationImplementation.FocusChanged += this.OnFocusChanged; ApplicationImplementation.Start(); if (testAppDomain != null) { // run has completed, now unload this appdomain AppDomain.Unload(testAppDomain); testAppDomain = null; ApplicationImplementation = null; } }
public App() { string bgTaskEntryPoint = typeof(HeadedBackgroundTask).FullName; _applicationImplementation = new ApplicationImplementation(bgTaskEntryPoint); }