Beispiel #1
0
        public static AutomationElement GetErrorDetails(AutomationElement moreInfoButton)
        {
            // Getting to the error details text box: It's a child of the More Info button's parent.
            // (IEWindow has many text boxes, so the search must be limited.)
            AutomationElement elem             = TreeWalker.RawViewWalker.GetParent(moreInfoButton);
            AutomationElement errorDetailsElem = null;

            // In IE8, the UIA element for the error page switched from Edit-> Text
            // Unfortunately there are lots of ControlType.Texts here, so find the 2nd one with a value pattern.
            if (ApplicationDeploymentHelper.GetIEVersion() >= 8)
            {
                AutomationElementCollection collection = elem.FindAll(TreeScope.Descendants,
                                                                      new AndCondition(
                                                                          new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Text),
                                                                          new PropertyCondition(AutomationElement.IsValuePatternAvailableProperty, true)));

                if (collection.Count >= 2)
                {
                    errorDetailsElem = collection[1];
                }
            }
            else
            {
                errorDetailsElem = elem.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit));
            }

            return(errorDetailsElem);
        }
Beispiel #2
0
        public override UIHandlerAction HandleWindow(IntPtr topLevelhWnd, IntPtr hwnd, System.Diagnostics.Process process, string title, UIHandlerNotification notification)
        {
            // Sleep for a bit.  Takes a bit longer for window to be ready in Longhorn.
            Thread.Sleep(800);

            // Get a reference to the IE window...
            GlobalLog.LogDebug("Finding IE window");
            AutomationElement ieWindow = AutomationElement.FromHandle(topLevelhWnd);

            if (ApplicationDeploymentHelper.GetIEVersion() >= 8)
            {
                GlobalLog.LogDebug("IE8+ present, using IWebBrowser2 Navigate() for reliability");
                Thread.Sleep(3000);
                // Other approaches are fine until they meet LCIE.
                // IF this proves to be 100% reliable, this could be the only implementation.
                IENavigationHelper.NavigateInternetExplorer(uriToNavigate.ToString(), process.MainWindowHandle);
            }
            else
            {
                NavigateIEWindow(ieWindow, uriToNavigate);
            }

            return(UIHandlerAction.Unhandled);
        }
Beispiel #3
0
        // Use this method to set up non-intrusive environment settings, such as IE default settings, etc.
        // Since AppMonitor can't guarantee it can clean this up, ONLY set values that can be persisted.
        // WARNING: IF THIS METHOD THROWS AN EXCEPTION ALL APPMONITOR FUNCTIONALITY WILL BE AFFECTED!!!
        //
        private void SetupEnvironmentForTest()
        {
            try
            {
                // **** Set reg keys to disable Cross-domain frame navigation.  Needed because there's a test that enables it temporarily.
                Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\1", "1607", 3, RegistryValueKind.DWord);
                Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3", "1607", 3, RegistryValueKind.DWord);
            }
            catch (Exception ex)
            {
                GlobalLog.LogDebug(" -- Exception trying to set up environment ... please fix X-Domain Frame Navigation setup code in ApplicationMonitor.SetupEnvironmentForTest() )\n" + ex.ToString());
            }

            try
            {
                // **** Set reg keys to prevent HTTPS Mixed content dialog
                Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\0", "1609", 0, RegistryValueKind.DWord);
                Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\1", "1609", 0, RegistryValueKind.DWord);
                Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2", "1609", 0, RegistryValueKind.DWord);
                Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3", "1609", 0, RegistryValueKind.DWord);
            }
            catch (Exception ex)
            {
                GlobalLog.LogDebug(" -- Exception trying to set up environment ... please fix HTTPS Mixed content dialog in ApplicationMonitor.SetupEnvironmentForTest()\n" + ex.ToString());
            }
            try
            {
                // **** Set reg key to prevent IE7 Phishing Filter dialog...
                if (ApplicationDeploymentHelper.GetIEVersion() >= 7)
                {
                    Registry.SetValue(@"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\PhishingFilter", "Enabled", 1, RegistryValueKind.DWord);
                }
                if (ApplicationDeploymentHelper.GetIEVersion() == 8)
                {
                    Registry.SetValue(@"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\PhishingFilter", "EnabledV8", 1, RegistryValueKind.DWord);
                }
            }
            catch (Exception ex)
            {
                GlobalLog.LogDebug(" -- Exception trying to set up environment ... please fix IE Phishing Filter key setup in ApplicationMonitor.SetupEnvironmentForTest()\n" + ex.ToString());
            }
            try
            {
                // **** Set reg key to prevent dialog for IE7 on Vista creating new instance for cross-zone navigation
                if (ApplicationDeploymentHelper.GetIEVersion() == 7 && Environment.OSVersion.Version.Major == 6)
                {
                    Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\LowRegistry\DontShowMeThisDialogAgain", "PromptForBrokerRedirect", "NO", RegistryValueKind.String);
                }
            }
            catch (Exception ex)
            {
                GlobalLog.LogDebug(" -- Exception trying to set up environment ... If this error is seen on Vista, please fix IE zone-change setting in ApplicationMonitor.SetupEnvironmentForTest()\n" + ex.ToString());
            }
            try
            {
                // **** Set reg key to prevent dialog for first-time IE7 GoldBar display
                // **** The bar still displays but this prevents a modal dialog from blocking animation.
                if (ApplicationDeploymentHelper.GetIEVersion() == 7)
                {
                    Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\InformationBar", "FirstTime", 0, RegistryValueKind.DWord);
                }
            }
            catch (Exception ex)
            {
                GlobalLog.LogDebug(" -- Exception trying to set up environment ... Please fix IE \"First Goldbar\" code in ApplicationMonitor.SetupEnvironmentForTest()\n" + ex.ToString());
            }
            try
            {
                // **** Set reg key to prevent dialog for first-time HTTPS navigation.
                // **** If this UI shows automation can be blocked.
                Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings", "WarnonZo----ssing", 0, RegistryValueKind.DWord);
            }
            catch (Exception ex)
            {
                GlobalLog.LogDebug(" -- Exception trying to set up environment ... Please fix IE \"first-time HTTPS navigation\" code in ApplicationMonitor.SetupEnvironmentForTest()\n" + ex.ToString());
            }

            if ((SystemInformation.Current.IsPersonalEdition) && (SystemInformation.Current.MajorVersion == 6))
            {
                try
                {
                    // **** Set reg key to prevent dialog for first-time HTTPS navigation.
                    // **** If this UI shows automation can be blocked.
                    Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings", "WarnonZo----ssing", 0, RegistryValueKind.DWord);
                }
                catch (Exception ex)
                {
                    GlobalLog.LogDebug(" -- Exception trying to set up environment ... Please fix IE \"Enable Intranet Zone for Home SKUs\" code in ApplicationMonitor.SetupEnvironmentForTest()\n" + ex.ToString());
                }
            }

            try
            {
                // **** Set reg key to prevent dialog when IE thinks it's not the default browser.
                // **** Needed since if this is set programatically via registry, IE still detects change on some platforms.
                Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main", "ShowedCheckBrowser", "no", RegistryValueKind.String);
                Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main", "Check_Associations", "no", RegistryValueKind.String);
            }
            catch (Exception ex)
            {
                GlobalLog.LogDebug(" -- Exception trying to set up environment ... Please fix IE \"Prevent Default Browser Check\" code in ApplicationMonitor.SetupEnvironmentForTest()\n" + ex.ToString());
            }

            try
            {
                // No special treatment for Server: WPF Automation lab disables ESC now.
                //// Add Internet zone URLs to trusted sites on any Server SKU.
                //// This allows the tests to run as expected on IE Enhanced Security mode, which is the default behavior for LH Server + Server 2K3
                //if (SystemInformation.Current.IsServer)
                //{
                //    ApplicationDeploymentHelper.AddUrlToZone(IEUrlZone.URLZONE_TRUSTED, FileHost.HttpInternetBaseUrl);
                //    ApplicationDeploymentHelper.AddUrlToZone(IEUrlZone.URLZONE_TRUSTED, FileHost.HttpsInternetBaseUrl);

                //    // Workaround for DD bugs # 129532 - LH Server: Xbap Error UI brings up IE Enhanced Security warning for local apps
                //    // Not needed on Server 2K3 SKUs.
                //    if (SystemInformation.Current.OSVersion.StartsWith("6"))
                //    {
                //        ApplicationDeploymentHelper.AddUrlToZone(IEUrlZone.URLZONE_TRUSTED, "about:security_PresentationHost.exe" );
                //    }
                //    Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main", "DisplayTrustAlertDlg", 0, RegistryValueKind.DWord);
                //    Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main", "RunOnceHasShown", 1, RegistryValueKind.DWord);
                //    Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings", "IEHardenIENoWarn", 1, RegistryValueKind.DWord);
                //}
                //else
                //{
                ApplicationDeploymentHelper.AddUrlToZone(IEUrlZone.URLZONE_INTERNET, FileHost.HttpInternetBaseUrl);
                ApplicationDeploymentHelper.AddUrlToZone(IEUrlZone.URLZONE_INTERNET, FileHost.HttpsInternetBaseUrl);
                //}
                ApplicationDeploymentHelper.AddUrlToZone(IEUrlZone.URLZONE_INTRANET, FileHost.HttpIntranetBaseUrl);
                ApplicationDeploymentHelper.AddUrlToZone(IEUrlZone.URLZONE_INTRANET, FileHost.HttpsIntranetBaseUrl);
                ApplicationDeploymentHelper.AddUrlToZone(IEUrlZone.URLZONE_INTRANET, FileHost.UncBaseUrl);
            }
            catch (Exception ex)
            {
                GlobalLog.LogDebug(" -- Exception trying to set up environment ... Please fix IE \"IE URL->Zone mapping ... \" code in ApplicationMonitor.SetupEnvironmentForTest()\n" + ex.ToString());
            }

            try
            {
                Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main", "IE8RunOnceCompleted", 1, RegistryValueKind.DWord);
                Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Recovery", "AutoRecover", 2, RegistryValueKind.DWord);
            }
            catch (Exception ex)
            {
                GlobalLog.LogDebug(" -- Exception trying to set up environment ... Please fix IE 8 first-run prep code in ApplicationMonitor.SetupEnvironmentForTest()\n" + ex.ToString());
            }

            // Rarely, one of two specific PartialTrust tests will fail to complete.  If this happens, a regkey gets left behind that
            // disables all access to WebBrowser or Media.  Any further tests of those items on this machine will fail.
            // Try to delete those keys to save a massive headache.
            try
            {
                RegistryKey wpfFeaturesKey = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\.NETFramework\Windows Presentation Foundation\Features", true);
                if (wpfFeaturesKey != null)
                {
                    wpfFeaturesKey.DeleteValue("WebBrowserDisallow", false);
                    wpfFeaturesKey.DeleteValue("MediaAudioDisallow", false);
                    wpfFeaturesKey.DeleteValue("MediaImageDisallow", false);
                    wpfFeaturesKey.DeleteValue("MediaVideoDisallow", false);
                    wpfFeaturesKey.DeleteValue("XBAPDisallow", false);
                    wpfFeaturesKey.DeleteValue("ScriptInteropDisallow", false);
                    wpfFeaturesKey.Close();
                }
                // If there's a WOW6432Node defined, we need to check this as well.
                // Currently this only matters for Win7 because otherwise the previous call would have cleaned all these values.
                // Win7 removes hidden redirection but there still are "two" registries.
                wpfFeaturesKey = Registry.LocalMachine.OpenSubKey(@"Software\Wow6432Node\Microsoft\.NETFramework\Windows Presentation Foundation\Features", true);
                if (wpfFeaturesKey != null)
                {
                    wpfFeaturesKey.DeleteValue("WebBrowserDisallow", false);
                    wpfFeaturesKey.DeleteValue("MediaAudioDisallow", false);
                    wpfFeaturesKey.DeleteValue("MediaImageDisallow", false);
                    wpfFeaturesKey.DeleteValue("MediaVideoDisallow", false);
                    wpfFeaturesKey.DeleteValue("XBAPDisallow", false);
                    wpfFeaturesKey.DeleteValue("ScriptInteropDisallow", false);
                    wpfFeaturesKey.Close();
                }
            }
            catch (Exception)
            {
                // if we didn't find the regkey, ignore the exception
            }

            // Information bar first run dialog is usually ignorable but some focus tracking tests get confused by it, so prevent it from showing.
            try
            {
                Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\InformationBar", "FirstTime", 0, RegistryValueKind.DWord);
            }
            catch (Exception ex)
            {
                GlobalLog.LogDebug(" -- Exception trying to set up environment ... Please fix IE Information Bar first run logic in ApplicationMonitor.SetupEnvironmentForTest():" + ex.ToString());
            }

            //On IE9, XBAPs are disabled in the Internet Zone.  Re-enable them so tests will start.
            //Note: We just enable no matter what Windows/IE version we're on, since we always want this on,
            //and it won't hurt to set it to 0 (enable) if it's already 0.
            try
            {
                Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3", "2400", 0, RegistryValueKind.DWord);
            }
            catch (Exception ex)
            {
                GlobalLog.LogDebug(" -- Exception trying to set up environment ... Please fix Internet Zone XBAP enable logic in ApplicationMonitor.SetupEnvironmentForTest():" + ex.ToString());
            }
        }