WatiN LogonDialogHandlers not working correctly in Windows 7

后端 未结 7 1096
旧巷少年郎
旧巷少年郎 2020-12-07 02:01

I have recently updated to Windows 7, VS2010 and IE8. We have an automation suite running tests against IE using WatiN. These tests require the logon dialog handler to be us

相关标签:
7条回答
  • 2020-12-07 02:29

    For whatever reason the code Clint posted had comments instead of entering the username, password and submitting, and referenced an undefined method, but is otherwise OK. Here's some completed (and working) code:

        public static Browser Win7Login(string username, string password, string URL) {
            Process ieProcess = Process.Start("iexplore.exe", URL);
            ieProcess.WaitForInputIdle();
    
            Thread.Sleep(2000);
    
            AutomationElement ieWindow = AutomationElement.FromHandle(ieProcess.MainWindowHandle);
            string t = ieWindow.Current.ClassName.ToString();
    
            Condition conditions = new AndCondition(new PropertyCondition(AutomationElement.IsEnabledProperty, true),
                                       new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Window));
            Condition List_condition = new AndCondition(new PropertyCondition(AutomationElement.IsEnabledProperty, true),
                                            new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.ListItem));
            Condition Edit_condition = new AndCondition(new PropertyCondition(AutomationElement.IsEnabledProperty, true),
                                        new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit));
            Condition button_conditions = new AndCondition(new PropertyCondition(AutomationElement.IsEnabledProperty, true),
                                         new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Button));
    
            AutomationElementCollection c = ieWindow.FindAll(TreeScope.Children, conditions);
            foreach (AutomationElement child in c) {
                if (child.Current.ClassName.ToString() == "#32770") {
                    // find the list
                    AutomationElementCollection lists = child.FindAll(TreeScope.Children, List_condition);
                    // find the buttons
                    AutomationElementCollection buttons = child.FindAll(TreeScope.Children, button_conditions);
    
                    foreach (AutomationElement list in lists) {
                        if (list.Current.ClassName.ToString() == "UserTile") {
                            AutomationElementCollection edits = list.FindAll(TreeScope.Children, Edit_condition);
                            foreach (AutomationElement edit in edits) {
                                if (edit.Current.Name.Contains("User name")) {
                                    edit.SetFocus();
                                    ValuePattern usernamePattern = edit.GetCurrentPattern(ValuePattern.Pattern) as ValuePattern;
                                    usernamePattern.SetValue(username);
                                }
                                if (edit.Current.Name.Contains("Password")) {
                                    edit.SetFocus();
                                    ValuePattern passwordPattern = edit.GetCurrentPattern(ValuePattern.Pattern) as ValuePattern;
                                    passwordPattern.SetValue(password);
                                }
                            }
                        }
                    }
                    foreach (AutomationElement button in buttons) {
                        if (button.Current.AutomationId == "SubmitButton") {
                            InvokePattern submitPattern = button.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern;
                            submitPattern.Invoke();
                            break;
                        }
                    }
                }
            }
            return IE.AttachTo<IE>(Find.By("hwnd", ieWindow.Current.NativeWindowHandle.ToString()), 30);
        }
    
    0 讨论(0)
提交回复
热议问题