예제 #1
0
        internal bool tryInvokeByPropertyCondition(PropertyCondition cond, AutomationElement window)
        {
            AutomationElement theItem = window.FindFirst(TreeScope.Descendants, cond);

            if (theItem == null)
            {
                return(false);
            }

            OperationCompletedObject result = new OperationCompletedObject();

            try
            {
                object patternObject;
                theItem.TryGetCurrentPattern(InvokePattern.Pattern, out patternObject);
                InvokePattern ip = patternObject as InvokePattern;

                // Eduardot: Just to wake up the queues...
                // This is a terrible hack but I want to validate
                // some suspicious about a

                System.Windows.Threading.DispatcherTimer timer = new System.Windows.Threading.DispatcherTimer();
                timer.Interval = TimeSpan.FromSeconds(3);
                timer.Tag      = result;
                timer.Tick    += delegate(object oTimer, EventArgs args)
                {
                    System.Windows.Threading.DispatcherTimer currentTimer = (System.Windows.Threading.DispatcherTimer)oTimer;
                    OperationCompletedObject r = (OperationCompletedObject)(currentTimer).Tag;
                    if (r.Completed)
                    {
                        currentTimer.Stop();
                    }
                };
                timer.Start();
                ip.Invoke();
            }
            catch (System.Windows.Automation.NoClickablePointException)
            {
                // If it throws the exception again, something is wrong (workaround not working around problem),
                // so this one should just let itself get thrown.
                // We sleep here so that other Trust dialogs that are popping up in the mean time get a chance to move
                // themselves to a different quadrant.  If the exception isnt thrown, there is no delay.
                Thread.Sleep(3000);
                object patternObject;
                theItem.TryGetCurrentPattern(InvokePattern.Pattern, out patternObject);
                InvokePattern ip = patternObject as InvokePattern;
                ip.Invoke();
            }
            finally
            {
                result.Completed = true;
            }
            return(true);
        }
예제 #2
0
        /// <summary>
        /// Close microsoft office dialog
        /// </summary>
        public static void CloseMicrosoftOfficeDialog()
        {
            var               desktop     = AutomationElement.RootElement;
            Condition         Con_Office  = new AndCondition(new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Window), new PropertyCondition(AutomationElement.NameProperty, "Microsoft Office"));
            AutomationElement item_Office = WaitForElement(desktop, Con_Office, TreeScope.Children, true);
            Condition         Con_Yes     = new AndCondition(new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Button), new PropertyCondition(AutomationElement.NameProperty, "Yes"));
            AutomationElement item_Yes    = item_Office.FindFirst(TreeScope.Descendants, Con_Yes);
            InvokePattern     Pattern_Yes = (InvokePattern)item_Yes.GetCurrentPattern(InvokePattern.Pattern);

            Pattern_Yes.Invoke();
        }
예제 #3
0
        public static bool TryGetInvokePattern(this AutomationElement element, out InvokePattern result)
        {
            if (element.TryGetCurrentPattern(System.Windows.Automation.InvokePattern.Pattern, out var pattern))
            {
                result = (InvokePattern)pattern;
                return(true);
            }

            result = null;
            return(false);
        }
예제 #4
0
        public void Invoke()
        {
            InvokePattern ip = e.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern;

            if (ip != null)
            {
                ip.Invoke();
                return;
            }
            throw new Exception("Element '" + e.Current.Name + "' does not support InvokePattern");
        }
예제 #5
0
        public void Click(bool log)
        {
            if (log)
            {
                procedureLogger.Action(string.Format("Click {0}.", this.NameAndType));
            }

            InvokePattern ip = (InvokePattern)element.GetCurrentPattern(InvokePattern.Pattern);

            ip.Invoke();
        }
        public void InvokeThirdListElement(string thirdListelementNamePart)
        {
            AutomationElement root        = AutomationElement.RootElement;
            AutomationElement smartHMI    = GetMainWindow();
            AutomationElement kcpFrame    = GetElementByAutomationID(smartHMI, "SmartHMI.KcpFrame");
            AutomationElement mainContent = GetElementByAutomationID(kcpFrame, "SmartHMI.MainContent");

            Trace.TraceInformation("mainContent element available");
            AutomationElement overlay = GetElementByAutomationID(mainContent, "Displays.Overlay");

            Trace.TraceInformation("overlay element available");
            AutomationElement mainMenuView = GetElementByAutomationID(overlay, "Views.Menu");

            if (mainMenuView == null)
            {
                Trace.TraceInformation("Main Menu element not available. Not the Main Menu View is shown.");
                return;
            }
            Trace.TraceInformation("Main Menu element available");
            AutomationElement menuViewColumns = GetElementByAutomationID(mainMenuView, "Menu.Columns");

            Trace.TraceInformation("Menu.Columns element available");

            int listCounter = 0;

            foreach (AutomationElement item in menuViewColumns.FindAll(TreeScope.Children, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.ListItem)))
            {
                if (listCounter == 2)
                {
                    foreach (AutomationElement secondaryList in item.FindAll(TreeScope.Subtree, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.List)))
                    {
                        foreach (AutomationElement listElement in secondaryList.FindAll(TreeScope.Children, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.ListItem)))
                        {
                            Trace.TraceInformation("Secondary list element name: {0}", listElement.Current.Name.Split(' ')[1].Substring(listElement.Current.Name.Split(' ')[1].LastIndexOf('/') + 1));
                            if (listElement.Current.Name.Contains(thirdListelementNamePart))
                            {
                                foreach (AutomationElement automationElement in listElement.FindAll(TreeScope.Subtree, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Button)))
                                {
                                    if (automationElement.Current.Name.Contains(thirdListelementNamePart))
                                    {
                                        InvokePattern menuButtonInvoke = automationElement.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern;  //Click on button
                                        menuButtonInvoke.Invoke();
                                        Trace.TraceInformation("{0} name element invoked", automationElement.Current.Name);
                                    }
                                }
                            }
                        }
                    }
                }
                listCounter++;
            }

            //get current view name and elements?
        }
예제 #7
0
        public override void perform(ComponentPrx component, Ice.Current context__)
        {
            AutomationElement element = WGComponent.fromId(component.getId());

            if (isActable(element))
            {
                InvokePattern pattern =
                    element.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern;
                pattern.Invoke();
            }
        }
        public void ClickOnRobotButton()
        {
            AutomationElement root        = GetTopStatusBar();
            AutomationElement robotButton = GetElementByAutomationID(root, "NaviStatusControl.OpenViewButton");

            InvokePattern robotDropDownInvoke = robotButton.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern;

            robotDropDownInvoke.Invoke();

            WalkThroughViewableTiles();
        }
        public void ClickOnRobotDropDownButton()
        {
            Trace.TraceInformation("Click on Robot dropdown list");
            AutomationElement root                = GetTopStatusBar();
            AutomationElement robotDropDown       = GetElementByAutomationID(root, "NaviStatusControl.OpenPopupView");
            InvokePattern     robotDropDownInvoke = robotDropDown.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern;

            robotDropDownInvoke.Invoke();

            //SelectRobotFromDropDown(robotDropDown);
        }
예제 #10
0
        /// <summary>
        /// Close fileInUse window
        /// </summary>
        /// <param name="docName">Document name</param>
        public static void CloseFileInUsePane(string docName)
        {
            var desktop = AutomationElement.RootElement;
            AutomationElement documentFormat  = WaitForElement(desktop, new PropertyCondition(AutomationElement.NameProperty, "Word"), TreeScope.Children, true);
            AutomationElement FileInUseDialog = WaitForElement(documentFormat, new PropertyCondition(AutomationElement.NameProperty, "File In Use"), TreeScope.Children, true);
            Condition         OK_button       = new AndCondition(new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Button), new PropertyCondition(AutomationElement.NameProperty, "OK"));
            AutomationElement item_OK         = FileInUseDialog.FindFirst(TreeScope.Descendants, OK_button);
            InvokePattern     Pattern_OK      = (InvokePattern)item_OK.GetCurrentPattern(InvokePattern.Pattern);

            Pattern_OK.Invoke();
        }
예제 #11
0
 public static void ClickMenuItem(AutomationElement aeMenuItem)
 {
     try
     {
         InvokePattern ipClickButton1 =
             (InvokePattern)aeMenuItem.GetCurrentPattern(
                 InvokePattern.Pattern);
         ipClickButton1.Invoke();
     }
     catch { }
 }
예제 #12
0
        public bool TryInvoke()
        {
            InvokePattern pattern = _element.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern;

            if (pattern == null)
            {
                return(false);
            }
            pattern.Invoke();
            return(true);
        }
예제 #13
0
        protected void RunCommand(string command)
        {
            ValuePattern cmd = (ValuePattern)txtCommandElement.GetCurrentPattern(ValuePattern.Pattern);

            cmd.SetValue(command);
            Thread.Sleep(500);
            InvokePattern run = (InvokePattern)btnRunElement.GetCurrentPattern(InvokePattern.Pattern);

            run.Invoke();
            Thread.Sleep(500);
        }
        public void GetCachedPatternTest()
        {
            CacheRequest req = new CacheRequest();

            req.Add(InvokePatternIdentifiers.Pattern);
            using (req.Activate())
            {
                InvokePattern pattern = (InvokePattern)GetStartButton().GetCachedPattern(InvokePatternIdentifiers.Pattern);
                Assert.IsNotNull(pattern);
            }
        }
예제 #15
0
        public override void perform(Ice.Current context__)
        {
            AutomationElement element = component.Element;

            if (isActable(element))
            {
                InvokePattern pattern =
                    element.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern;
                pattern.Invoke();
            }
        }
        public void ClickOnClockSymbol()
        {
            AutomationElement leftBar           = GetLeftSideBar();
            AutomationElement leftBarMiddle     = GetElementByAutomationID(leftBar, "Displays.LeftSideBar.Middle");
            AutomationElement leftBarMiddleView = GetElementByAutomationID(leftBarMiddle, "Views.LeftStatusBar.Middle");
            AutomationElement clockView         = GetElementByAutomationID(leftBarMiddleView, "Views.StatusBar.Clock");
            AutomationElement clockSymb         = GetElementByAutomationID(clockView, "clockHands");

            InvokePattern clockInvoke = clockSymb.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern;  //Click on Robot button

            clockInvoke.Invoke();
        }
        /// <summary>
        /// Save a document which is opening and editing in office word
        /// </summary>
        /// <param name="filename">Document name</param>
        public static void WordEditSave(string filename)
        {
            var       desktop      = AutomationElement.RootElement;
            Condition Con_Document = new AndCondition(new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Window),
                                                      new OrCondition(new PropertyCondition(AutomationElement.NameProperty, filename + ".docx - Word"), new PropertyCondition(AutomationElement.NameProperty, filename + " - Word")));
            AutomationElement item_Document = desktop.FindFirst(TreeScope.Children, Con_Document);
            Condition         Con_Save      = new AndCondition(new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Button), new PropertyCondition(AutomationElement.NameProperty, "Save"));
            AutomationElement item_Save     = WaitForElement(item_Document, Con_Save, TreeScope.Descendants, false);
            InvokePattern     Pattern_Save  = (InvokePattern)item_Save.GetCurrentPattern(InvokePattern.Pattern);

            Pattern_Save.Invoke();
        }
예제 #18
0
        private void ClickButton(string name)
        {
            AutomationElement tab = window.FindFirstWithRetries(TreeScope.Descendants, new PropertyCondition(AutomationElement.AutomationIdProperty, name));

            if (tab == null)
            {
                throw new Exception("Button '" + name + "' not found");
            }
            InvokePattern invoke = (InvokePattern)tab.GetCurrentPattern(InvokePattern.Pattern);

            invoke.Invoke();
        }
예제 #19
0
        static private void PressButton(AutomationElement elementList)
        {
            if (elementList == null)
            {
                Console.WriteLine("Button instance not found.");
                return;
            }
            InvokePattern buttonPattern = (InvokePattern)elementList.GetCurrentPattern(InvokePattern.Pattern);

            //Once get the pattern then calling Invoke method on that
            buttonPattern.Invoke();
        }
예제 #20
0
        //<Snippet1102>
        ///--------------------------------------------------------------------
        /// <summary>
        /// Handles the Invoke click event on the client control.
        /// The client click handler calls Invoke() on the equivalent target control.
        /// </summary>
        /// <param name="sender">The object that raised the event.</param>
        /// <param name="e">Event arguments.</param>
        /// <remarks>
        /// The Tag property of the FrameworkElement, the client button in this
        /// case, is used to store the InvokePattern object previously obtained
        /// from the associated target control.
        /// </remarks>
        ///--------------------------------------------------------------------
        void Invoke_Click(object sender, RoutedEventArgs e)
        {
            Button        clientButton        = sender as Button;
            InvokePattern targetInvokePattern = clientButton.Tag as InvokePattern;

            if (targetInvokePattern == null)
            {
                return;
            }
            targetInvokePattern.Invoke();
            statusText.Text = "Button invoked.";
        }
        public void Close()
        {
            AutomationElement button = panel.FindFirstWithRetries(TreeScope.Children, new PropertyCondition(AutomationElement.AutomationIdProperty, "ButtonCloseDownloads"));

            if (button == null)
            {
                throw new Exception("Cannot find ButtonCloseDownloads");
            }
            InvokePattern invoke = (InvokePattern)button.GetCurrentPattern(InvokePattern.Pattern);

            invoke.Invoke();
        }
예제 #22
0
        public void ClickControl(AutomationElement element)
        {
            try
            {
                object        objPattern;
                InvokePattern invPattern = null;
                if (true == element.TryGetCurrentPattern(InvokePattern.Pattern, out objPattern))
                {
                    invPattern = objPattern as InvokePattern;
                }

                if (invPattern != null)
                {
                    invPattern.Invoke();
                    _isEnabled = true;

                    return;
                }

                SelectionItemPattern selPattern = null;
                if (element.TryGetCurrentPattern(SelectionItemPattern.Pattern, out objPattern))
                {
                    selPattern = objPattern as SelectionItemPattern;
                }
                if (selPattern != null)
                {
                    selPattern.Select();
                    _isEnabled = true;
                    return;
                }
            }

            catch (ElementNotEnabledException)
            {
                _isEnabled = false;
                System.Console.WriteLine("Element is not enabled.");


                if (_isEnabled == false && _timeout <= 1000)
                {
                    _timeout++;
                    System.Console.WriteLine("Attempt {0}", _timeout);
                    ClickControl(element);
                }

                if (_isEnabled == false && _timeout >= 2000)
                {
                    System.Console.WriteLine("Timed out trying to click element");
                    throw new NoClickablePointException("ClickControl could not click due to a disabled element");
                }
            }
        }
        public void ClickOnMainMenuButton()
        {
            AutomationElement root        = AutomationElement.RootElement;
            AutomationElement smartHMI    = GetElementByAutomationID(root, "SmartHMI.MainWindow");
            AutomationElement kcpFrame    = GetElementByAutomationID(smartHMI, "SmartHMI.KcpFrame");
            AutomationElement mainContent = GetElementByAutomationID(kcpFrame, "KcpKeys.Rob");

            InvokePattern btMainInvoke = mainContent.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern;  //Click on Main Menu

            btMainInvoke.Invoke();

            GetMainMenuElements();
        }
예제 #24
0
        /// <summary>
        /// 按指定名称的 按钮.
        /// </summary>
        /// <param name="name"></param>
        void PressButton(String name)
        {
            Console.WriteLine("按 [{0}] 按钮。", name);
            // 通过名字,取得按钮对象.
            AutomationElement aeButton = GetButton(name);
            // 通过InvokePattern模拟点击按钮
            InvokePattern ipClickButton1 =
                (InvokePattern)aeButton.GetCurrentPattern(InvokePattern.Pattern);

            ipClickButton1.Invoke();
            // 休眠指定时间.
            Thread.Sleep(DEFAULT_SLEEP_TIME);
        }
예제 #25
0
 public Boolean ClickElement(AutomationElement Element)
 {
     try
     {
         InvokePattern ipElement = (InvokePattern)Element.GetCurrentPattern(InvokePattern.Pattern);
         ipElement.Invoke();
         return(true);
     }
     catch
     {
         return(false);
     }
 }
        }        //open new

        private static AutomationElement InvokeAndCache(string search_term, IntPtr handle)
        {
            AutomationElement search = null;

            try
            {
                AutomationElement aeDesktop = AutomationElement.RootElement;
                AutomationElement aeBrowser = AutomationElement.FromHandle(handle);
                // Set up the request.
                CacheRequest cacheRequest = new CacheRequest();
                cacheRequest.AutomationElementMode = AutomationElementMode.None;
                cacheRequest.TreeFilter            = Automation.ControlViewCondition;
                cacheRequest.Add(AutomationElement.ControlTypeProperty);
                cacheRequest.Add(InvokePattern.Pattern);
                System.Windows.Automation.Condition conLocation = new OrCondition(
                    new PropertyCondition(AutomationElement.NameProperty, "Navigation Toolbar"),
                    new PropertyCondition(AutomationElement.NameProperty, "Панель навигации"));         //russian name of the tab
                AutomationElement navigation = null;
                navigation = aeBrowser.FindFirst(TreeScope.Descendants, conLocation);
                cacheRequest.Push();
                if (navigation != null)
                {
                    AutomationElementCollection elList = navigation.FindAll(TreeScope.Descendants, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit));
                    if (elList != null && elList.Count > 1)
                    {
                        search = elList[elList.Count - 1];
                    }
                }
                if (search != null)
                {
                    Util.BringToFront(handle);
                    InvokePattern iPattern = search.GetCachedPattern(InvokePattern.Pattern) as InvokePattern;
                    cached = search;
                    if (iPattern != null)
                    {
                        iPattern.Invoke();
                        //Util.SimulateMessage(search_term,true); //above what simulateMessage does
                        winform.SendKeys.SendWait(message);
                        winform.SendKeys.SendWait("{ENTER}");
                        Util.Debuglog("cached then invoked : " + search_term);
                    }    //if iPattern
                }        //if
                cacheRequest.Pop();
            }
            catch (Exception ex)
            {
                Util.Debuglog(ex.Message);
            }        //try catch
            return(search);
        }
예제 #27
0
파일: Operate.cs 프로젝트: liuxilu/UIActrl
 public static bool Invoke(AutoElem e)
 {
     if (e.TryGetCurrentPattern(InvokePattern.Pattern, out object obj))
     {
         InvokePattern Pattern = obj as InvokePattern;
         Pattern.Invoke();
         Console.WriteLine("invoked");
         return(true);
     }
     else
     {
         return(false);
     }
 }
예제 #28
0
        private void WindowOpenOnNotepadClose(object sender, AutomationEventArgs e)
        {
            //click dont save the document
            AutomationElement saveWindow = sender as AutomationElement;

            PropertyCondition dontSaveButtonCondition = new PropertyCondition(AutomationElement.AutomationIdProperty, "CommandButton_7");
            AutomationElement dontSaveButton          = saveWindow.FindFirst(TreeScope.Descendants, dontSaveButtonCondition);

            if (dontSaveButton != null)
            {
                InvokePattern dontSaveButtonInvokePattern = dontSaveButton.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern;
                dontSaveButtonInvokePattern.Invoke();
            }
        }
예제 #29
0
        public void LogOnButtonClick()
        {
            AutomationElement desktop  = AutomationElement.RootElement;
            AutomationElement sapui    = desktop.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, "SAP Logon 730"));
            AutomationElement BtnlogOn = sapui.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.AutomationIdProperty, "1068"));
            InvokePattern     click    = (InvokePattern)BtnlogOn.GetCurrentPattern(InvokePattern.Pattern);

            click.Invoke();
            click    = null;
            BtnlogOn = null;
            sapui    = null;
            desktop  = null;
            GC.Collect();
        }
예제 #30
0
        public void SatisfyEverySafeNetTokenPasswordRequest(string file, string password)
        {
            //// Source: http://stackoverflow.com/questions/17927895/automate-extended-validation-ev-code-signing
            int count = 0;

            Automation.AddAutomationEventHandler(WindowPattern.WindowOpenedEvent, AutomationElement.RootElement, TreeScope.Children, (sender, e) =>
            {
                AutomationElement element = sender as AutomationElement;
                if (element.Current.Name == "Token Logon")
                {
                    WindowPattern pattern = (WindowPattern)element.GetCurrentPattern(WindowPattern.Pattern);
                    pattern.WaitForInputIdle(10000);
                    AutomationElement edit = element.FindFirst(TreeScope.Descendants, new AndCondition(
                                                                   new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Edit),
                                                                   new PropertyCondition(AutomationElement.NameProperty, "Token Password:"******"OK")));

                    if (edit != null && ok != null)
                    {
                        count++;
                        ValuePattern vp = (ValuePattern)edit.GetCurrentPattern(ValuePattern.Pattern);
                        vp.SetValue(password);
                        Console.WriteLine("SafeNet window (count: " + count + " window(s)) detected. Setting password...");

                        InvokePattern ip = (InvokePattern)ok.GetCurrentPattern(InvokePattern.Pattern);
                        ip.Invoke();
                    }
                    else
                    {
                        Console.WriteLine("SafeNet window detected but not with edit and button...");
                    }
                }
            });

            bool fileExist = true;

            do
            {
                Thread.Sleep(500);
                if (!File.Exists(file))
                {
                    fileExist = false;
                }
            }while (fileExist);

            Automation.RemoveAllEventHandlers();
        }