Пример #1
0
        public static void ForAppDebugger()
        {
            Button   waitForDebuggerInvokerButton = new Button(FindElement.ById("__WaitForDebuggerInvoker"));
            CheckBox debuggerAttachedCheckBox     = new CheckBox(FindElement.ById("__DebuggerAttachedCheckBox"));

            using (UIEventWaiter debuggerAttachedWaiter = debuggerAttachedCheckBox.GetToggledWaiter())
            {
                using (var processWaiter = new ProcessClosedWaiter(TestEnvironment.Application.Process))
                {
                    Log.Comment(string.Format("Waiting for a debugger to attach (processId = {0})...", TestEnvironment.Application.Process.Id));
                    waitForDebuggerInvokerButton.Invoke();

                    var waiter = CompositableWaiter.WaitAny(TimeSpan.FromSeconds(300), debuggerAttachedWaiter, processWaiter);
                    if (waiter == processWaiter)
                    {
                        throw new WaiterException("Process exited while waiting for app debugger.");
                    }
                }
            }
        }
Пример #2
0
        public static void ForIdle(bool findElementsIfNull = true)
        {
            TestEnvironment.LogVerbose("Wait.ForIdle: Begin");
            try
            {
                // If any of these are null, then we haven't initialized our idle helpers yet.
                // We should just return - we'll do that soon after this.
                if (waitForIdleInvokerButton == null ||
                    idleStateEnteredCheckBox == null ||
                    errorReportingTextBox == null ||
                    logReportingTextBox == null)
                {
                    return;
                }

                using (UIEventWaiter idleStateEnteredWaiter = idleStateEnteredCheckBox.GetToggledWaiter())
                {
                    TestEnvironment.LogSuperVerbose("Wait.ForIdle: After GetToggledWaiter");
                    using (var errorReportedWaiter = new ValueChangedEventWaiter(errorReportingTextBox))
                    {
                        TestEnvironment.LogSuperVerbose("Wait.ForIdle: Before WaitForIdleInvoker.Invoke");

                        idleStateEnteredWaiter.AddFilter((WaiterEventArgs) => idleStateEnteredCheckBox.ToggleState == ToggleState.On);
                        waitForIdleInvokerButton.Invoke();

                        TestEnvironment.LogSuperVerbose("Wait.ForIdle: After WaitForIdleInvoker.Invoke");

                        var waiter = CompositableWaiter.WaitAny(TimeSpan.FromSeconds(300), idleStateEnteredWaiter, errorReportedWaiter);
                        if (waiter == errorReportedWaiter)
                        {
                            AutomationPropertyChangedEventArgs args = errorReportedWaiter.Arguments.EventArgs as AutomationPropertyChangedEventArgs;
                            string errorMessage = args.NewValue as string;

                            if (!IsRS2OrHigher() && errorMessage == "Animation complete wait took longer than idle timeout.")
                            {
                                Log.Warning("Timed out waiting for animation complete.  Queueing application to close after this test.");
                                TestEnvironment.ShouldRestartApplication = true;
                            }
                            else if (errorMessage.Length > 0)
                            {
                                Log.Error("Error while waiting for idle: {0}", errorMessage);
                                DumpHelper.DumpFullContext();
                                throw new WaiterException(errorMessage);
                            }
                        }
                        else
                        {
                            var value = logReportingTextBox.Value;
                            if (!String.IsNullOrEmpty(value))
                            {
                                TestEnvironment.LogSuperVerbose(value);
                                logReportingTextBox.SetValue("");
                            }
                        }
                    }
                }
            }
            catch (ElementNotAvailableException)
            {
                if (!isRetrying && findElementsIfNull)
                {
                    // If we got an element-not-available exception, we'll re-initialize our wait helper and try again.
                    // If that doesn't work, then we'll just fail.
                    ResetIdleHelper();
                    InitializeWaitHelper();

                    isRetrying = true;
                    ForIdle();
                }
                else
                {
                    if (TestEnvironment.Application.Process == null)
                    {
                        Log.Error("Tried to wait for idle before starting the test app!");
                    }
                    else if (TestEnvironment.Application.Process.HasExited)
                    {
                        Log.Error("Tried to wait for idle after the test app has closed!");
                    }

                    throw;
                }
            }
            TestEnvironment.LogVerbose("Wait.ForIdle: End");
        }