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); }
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); }
// 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()); } }