internal static bool TryClickOnBoundingRectangleCenter(
            MouseButton button,
            WindowAppElement element,
            bool doubleClick)
        {
            if (element == null)
            {
                throw new ArgumentNullException("element");
            }

            Point point;

            if (!AutomationElementHelper.TryGetBoundingRectangleCenter(element.Instance, out point))
            {
                Logger.Debug("Element '{0}' have empty BoundingRectangle", element);
                return(false);
            }

            if (doubleClick)
            {
                CruciatusFactory.Mouse.DoubleClick(button, point.X, point.Y);
            }
            else
            {
                CruciatusFactory.Mouse.Click(button, point.X, point.Y);
            }

            Logger.Info(
                "{0} on '{1}' element at ({2}, {3}) BoundingRectangle center",
                doubleClick ? "DoubleClick" : "Click",
                element,
                point.X,
                point.Y);
            return(true);
        }
        internal static bool TryClickOnClickablePoint(MouseButton button, WindowAppElement element, bool doubleClick)
        {
            if (element == null)
            {
                throw new ArgumentNullException("element");
            }

            var point = element.Properties.ClickablePoint;

            if (!point.HasValue)
            {
                Logger.Debug("Element '{0}' not have ClickablePoint", element);
                return(false);
            }

            var x = point.Value.X;
            var y = point.Value.Y;

            if (doubleClick)
            {
                CruciatusFactory.Mouse.DoubleClick(button, x, y);
            }
            else
            {
                CruciatusFactory.Mouse.Click(button, x, y);
            }

            Logger.Info(
                "{0} on '{1}' element at ({2}, {3}) ClickablePoint",
                doubleClick ? "DoubleClick" : "Click",
                element,
                x,
                y);
            return(true);
        }
        internal static bool TryClickUsingInvokePattern(WindowAppElement element, bool doubleClick)
        {
            if (element == null)
            {
                throw new ArgumentNullException("element");
            }

            object basePattern;

            if (element.Instance.TryGetCurrentPattern(InvokePattern.Pattern, out basePattern))
            {
                string cmd;
                var    invokePattern = (InvokePattern)basePattern;
                if (doubleClick)
                {
                    invokePattern.Invoke();
                    invokePattern.Invoke();
                    cmd = "DoubleClick";
                }
                else
                {
                    invokePattern.Invoke();
                    cmd = "Click";
                }

                Logger.Info("{0} emulation on '{1}' element with use invoke pattern", cmd, element);
                return(true);
            }

            Logger.Debug("Element '{0}' not support InvokePattern", element);
            return(false);
        }
        internal static IEnumerable <WindowAppElement> FindAll(WindowAppElement parent, By strategy, int timeout)
        {
            if (parent == null)
            {
                throw new ArgumentNullException("parent");
            }

            var result = strategy.FindAll(parent.Instance, timeout);

            return(result.Select(e => new WindowAppElement(parent, e, strategy)));
        }
        private void ValuePatternSetValue(WindowAppElement element, IEnumerable <JToken> args)
        {
            var value = args.ElementAtOrDefault(1);

            if (value == null)
            {
                var msg = string.Format(HelpArgumentsErrorMsg);
                throw new AutomationException(msg, ResponseStatus.JavaScriptError);
            }

            element.GetPattern <ValuePattern>(ValuePattern.Pattern).SetValue(value.ToString());
        }
        internal static WindowAppElement FindFirst(WindowAppElement parent, By strategy, int timeout)
        {
            var element = strategy.FindFirst(parent.Instance, timeout);

            if (element == null)
            {
                Logger.Info("Element '{0}' not found", strategy);
                CruciatusFactory.Screenshoter.AutomaticScreenshotCaptureIfNeeded();
                return(null);
            }

            return(new WindowAppElement(parent, element, strategy));
        }
        public string RegisterElement(WindowAppElement element)
        {
            var registeredKey =
                this.registeredElements.FirstOrDefault(
                    x => x.Value.Properties.RuntimeId == element.Properties.RuntimeId).Key;

            if (registeredKey == null)
            {
                Interlocked.Increment(ref safeInstanceCount);

                // TODO: Maybe use RuntimeId how registeredKey?
                registeredKey = element.GetHashCode() + "-"
                                + safeInstanceCount.ToString(string.Empty,
                                                             CultureInfo.InvariantCulture);
                this.registeredElements.Add(registeredKey, element);
            }

            return(registeredKey);
        }
Exemple #8
0
        public static TOut GetAutomationPropertyValue <TOut>(
            this WindowAppElement windowAppElement,
            AutomationProperty property)
        {
            try
            {
                return(windowAppElement.Instance.GetPropertyValue <TOut>(property));
            }
            catch (NotSupportedException)
            {
                var msg = string.Format("Element '{0}' not support '{1}'", windowAppElement, property.ProgrammaticName);
                CruciatusFactory.Logger.Error(msg);

                throw new CruciatusException("GET PROPERTY VALUE FAILED");
            }
            catch (InvalidCastException invalidCastException)
            {
                var msg = string.Format("Invalid cast from '{0}' to '{1}'.", invalidCastException.Message,
                                        typeof(TOut));
                CruciatusFactory.Logger.Error(msg);

                throw new CruciatusException("GET PROPERTY VALUE FAILED");
            }
        }
        internal static bool TryGetTextUsingTextPattern(WindowAppElement element, out string text)
        {
            if (element == null)
            {
                throw new ArgumentNullException("element");
            }

            object pattern;

            if (element.Instance.TryGetCurrentPattern(TextPattern.Pattern, out pattern))
            {
                var textPattern = pattern as TextPattern;
                if (textPattern != null)
                {
                    text = textPattern.DocumentRange.GetText(-1);
                    Logger.Info("Element '{0}' return text using TextPattern", element);
                    return(true);
                }
            }

            Logger.Debug("Element '{0}' not support TextPattern", element);
            text = null;
            return(false);
        }
        internal static bool TryGetTextUsingValuePattern(WindowAppElement element, out string text)
        {
            if (element == null)
            {
                throw new ArgumentNullException("element");
            }

            object pattern;

            if (element.Instance.TryGetCurrentPattern(ValuePattern.Pattern, out pattern))
            {
                var valuePattern = pattern as ValuePattern;
                if (valuePattern != null)
                {
                    Logger.Info("Element '{0}' return text with use ValuePattern", element);
                    text = valuePattern.Current.Value;
                    return(true);
                }
            }

            Logger.Debug("Element '{0}' not support ValuePattern", element);
            text = null;
            return(false);
        }
Exemple #11
0
 public static void ClickWithPressedCtrl(this WindowAppElement element)
 {
     ClickWithPressedKeys(element, new List <VirtualKeyCode> {
         VirtualKeyCode.CONTROL
     });
 }
Exemple #12
0
        /// <summary>
        /// Кликает по заданной кнопке диалогового окна.
        /// </summary>
        /// <param name="dialogWindow">
        /// Диалоговое окно.
        /// </param>
        /// <param name="buttonsType">
        /// Тип набора кнопок диалогово окна.
        /// </param>
        /// <param name="targetButton">
        /// Целевая кнопка.
        /// </param>
        public static void ClickButton(
            WindowAppElement dialogWindow,
            MessageBoxButton buttonsType,
            MessageBoxResult targetButton)
        {
            if (dialogWindow == null)
            {
                throw new ArgumentNullException("dialogWindow");
            }

            var condition   = new PropertyCondition(WindowPattern.IsModalProperty, true);
            var modalwindow = AutomationElementHelper.FindFirst(dialogWindow.Instance, TreeScope.Children, condition);

            if (modalwindow == null)
            {
                throw new CruciatusException("NOT CLICK BUTTON");
            }

            string uid;

            if (targetButton == MessageBoxResult.None)
            {
                uid = CruciatusFactory.Settings.MessageBoxButtonUid.CloseButton;
            }
            else
            {
                switch (buttonsType)
                {
                case MessageBoxButton.OK:
                    switch (targetButton)
                    {
                    case MessageBoxResult.OK:
                        uid = CruciatusFactory.Settings.MessageBoxButtonUid.OkType.Ok;
                        break;

                    default:
                        throw new CruciatusException("NOT CLICK BUTTON");
                    }

                    break;

                case MessageBoxButton.OKCancel:
                    switch (targetButton)
                    {
                    case MessageBoxResult.OK:
                        uid = CruciatusFactory.Settings.MessageBoxButtonUid.OkCancelType.Ok;
                        break;

                    case MessageBoxResult.Cancel:
                        uid = CruciatusFactory.Settings.MessageBoxButtonUid.OkCancelType.Cancel;
                        break;

                    default:
                        throw new CruciatusException("NOT CLICK BUTTON");
                    }

                    break;

                case MessageBoxButton.YesNo:
                    switch (targetButton)
                    {
                    case MessageBoxResult.Yes:
                        uid = CruciatusFactory.Settings.MessageBoxButtonUid.YesNoType.Yes;
                        break;

                    case MessageBoxResult.No:
                        uid = CruciatusFactory.Settings.MessageBoxButtonUid.YesNoType.No;
                        break;

                    default:
                        throw new CruciatusException("NOT CLICK BUTTON");
                    }

                    break;

                case MessageBoxButton.YesNoCancel:
                    switch (targetButton)
                    {
                    case MessageBoxResult.Yes:
                        uid = CruciatusFactory.Settings.MessageBoxButtonUid.YesNoCancelType.Yes;
                        break;

                    case MessageBoxResult.No:
                        uid = CruciatusFactory.Settings.MessageBoxButtonUid.YesNoCancelType.No;
                        break;

                    case MessageBoxResult.Cancel:
                        uid = CruciatusFactory.Settings.MessageBoxButtonUid.YesNoCancelType.Cancel;
                        break;

                    default:
                        throw new CruciatusException("NOT CLICK BUTTON");
                    }

                    break;

                default:
                    throw new CruciatusException("NOT CLICK BUTTON");
                }
            }

            var buttonElement = new WindowAppElement(dialogWindow, modalwindow, null).FindElement(By.Uid(uid));

            buttonElement.Click();
        }
Exemple #13
0
 public static Menu ToMenu(this WindowAppElement element)
 {
     return(new Menu(element));
 }
Exemple #14
0
 public static ListBox ToListBox(this WindowAppElement element)
 {
     return(new ListBox(element));
 }
Exemple #15
0
 public static DataGrid ToDataGrid(this WindowAppElement element)
 {
     return(new DataGrid(element));
 }
Exemple #16
0
 public static ComboBox ToComboBox(this WindowAppElement element)
 {
     return(new ComboBox(element));
 }
Exemple #17
0
 public static CheckBox ToCheckBox(this WindowAppElement element)
 {
     return(new CheckBox(element));
 }
Exemple #18
0
 public static T GetPattern <T>(this WindowAppElement element, AutomationPattern pattern) where T : class
 {
     return(element.Instance.GetPattern <T>(pattern));
 }
Exemple #19
0
 public static void ClickWithPressedKeys(this WindowAppElement element, List <VirtualKeyCode> keys)
 {
     keys.ForEach(key => CruciatusFactory.Keyboard.KeyDown(key));
     element.Click();
     keys.ForEach(key => CruciatusFactory.Keyboard.KeyUp(key));
 }
 internal static IEnumerable <WindowAppElement> FindAll(WindowAppElement parent, By strategy)
 {
     return(FindAll(parent, strategy, CruciatusFactory.Settings.SearchTimeout));
 }
 internal static WindowAppElement FindFirst(WindowAppElement parent, By strategy)
 {
     return(FindFirst(parent, strategy, CruciatusFactory.Settings.SearchTimeout));
 }