コード例 #1
1
        internal static CruciatusElement FindFirst(CruciatusElement parent, By getStrategy, int timeout)
        {
            if (parent == null)
            {
                throw new ArgumentNullException("parent");
            }

            var element = FindFirst(parent.Instance, getStrategy, timeout);
            return element == null ? null : new CruciatusElement(parent, element, getStrategy);
        }
コード例 #2
0
        internal static IEnumerable<CruciatusElement> FindAll(CruciatusElement parent, By strategy, int timeout)
        {
            if (parent == null)
            {
                throw new ArgumentNullException("parent");
            }

            var result = strategy.FindAll(parent.Instance, timeout);
            return result.Select(e => new CruciatusElement(parent, e, strategy));
        }
コード例 #3
0
        internal static CruciatusElement FindFirst(CruciatusElement 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 CruciatusElement(parent, element, strategy);
        }
コード例 #4
0
        internal static AutomationElement FindFirst(AutomationElement parent, By getStrategy, int timeout)
        {
            var element = parent;
            foreach (var info in getStrategy.FindInfoList)
            {
                element = AutomationElementHelper.FindFirst(element, info.TreeScope, info.Condition, timeout);
                if (element == null)
                {
                    Logger.Info("Element '{0}' not found", info);
                    CruciatusFactory.Screenshoter.AutomaticScreenshotCaptureIfNeeded();
                    return null;
                }
            }

            return element;
        }
コード例 #5
0
        internal static IEnumerable<CruciatusElement> FindAll(CruciatusElement parent, By getStrategy, int timeout)
        {
            if (parent == null)
            {
                throw new ArgumentNullException("parent");
            }

            var element = parent.Instance;
            var info = getStrategy.FindInfoList;
            for (var i = 0; i < info.Count - 1; ++i)
            {
                element = AutomationElementHelper.FindFirst(element, info[i].TreeScope, info[i].Condition, timeout);
                if (element == null)
                {
                    Logger.Error("Element '{0}' not found", info);
                    CruciatusFactory.Screenshoter.AutomaticScreenshotCaptureIfNeeded();
                    throw new CruciatusException("ELEMENT NOT FOUND");
                }
            }

            var lastIinfo = getStrategy.FindInfoList.Last();
            var result = AutomationElementHelper.FindAll(element, lastIinfo.TreeScope, lastIinfo.Condition);
            return result.Select(e => new CruciatusElement(parent, e, getStrategy));
        }
コード例 #6
0
 internal static AutomationElement FindFirst(AutomationElement parent, By getStrategy)
 {
     return FindFirst(parent, getStrategy, CruciatusFactory.Settings.SearchTimeout);
 }
コード例 #7
0
 internal static IEnumerable<CruciatusElement> FindAll(CruciatusElement parent, By getStrategy)
 {
     return FindAll(parent, getStrategy, CruciatusFactory.Settings.SearchTimeout);
 }
コード例 #8
0
ファイル: DataGrid.cs プロジェクト: Zlabst/Winium.Cruciatus
 /// <summary>
 /// Создает экземпляр таблицы. Поиск осуществится только при необходимости.
 /// </summary>
 /// <param name="parent">
 /// Родительский элемент.
 /// </param>
 /// <param name="getStrategy">
 /// Стратегия поиска элемента.
 /// </param>
 public DataGrid(CruciatusElement parent, By getStrategy)
     : base(parent, getStrategy)
 {
 }
コード例 #9
0
ファイル: SecondTab.cs プロジェクト: Zlabst/Winium.Cruciatus
 public SecondTab(CruciatusElement parent, By getStrategy)
     : base(parent, getStrategy)
 {
 }
コード例 #10
0
ファイル: MainWindow.cs プロジェクト: Zlabst/Winium.Cruciatus
 public MainWindow(CruciatusElement parent, By getStrategy)
     : base(parent, getStrategy)
 {
 }
コード例 #11
0
ファイル: TabItem.cs プロジェクト: Zlabst/Winium.Cruciatus
 /// <summary>
 /// Создает экземпляр вкладки. Поиск осуществится только при необходимости.
 /// </summary>
 /// <param name="parent">
 /// Родительский элемент.
 /// </param>
 /// <param name="getStrategy">
 /// Стратегия поиска элемента.
 /// </param>
 public TabItem(CruciatusElement parent, By getStrategy)
     : base(parent, getStrategy)
 {
 }
コード例 #12
0
ファイル: ListBox.cs プロジェクト: Zlabst/Winium.Cruciatus
        /// <summary>
        /// Прокручивает список до элемента, удовлетворяющего стратегии поиска. 
        /// Возвращает целевой элемент, либо null, если он не найден.
        /// </summary>
        /// <param name="getStrategy">
        /// Стратегия поиска целевого элемента.
        /// </param>
        public CruciatusElement ScrollTo(By getStrategy)
        {
            if (!this.Instance.Current.IsEnabled)
            {
                Logger.Error("Element '{0}' not enabled. Scroll failed.", this.ToString());
                CruciatusFactory.Screenshoter.AutomaticScreenshotCaptureIfNeeded();
                throw new ElementNotEnabledException("NOT SCROLL");
            }

            var scrollPattern = this.Instance.GetCurrentPattern(ScrollPattern.Pattern) as ScrollPattern;
            if (scrollPattern == null)
            {
                Logger.Debug("{0} does not support ScrollPattern.", this);
                throw new ElementNotEnabledException("NOT SCROLL");
            }

            // Стартовый поиск элемента
            var element = CruciatusCommand.FindFirst(this, getStrategy, 1000);

            // Вертикальная прокрутка (при необходимости и возможности)
            if (element == null && scrollPattern.Current.VerticallyScrollable)
            {
                // Установка самого верхнего положения прокрутки
                while (scrollPattern.Current.VerticalScrollPercent > 0.1)
                {
                    scrollPattern.ScrollVertical(ScrollAmount.LargeDecrement);
                }

                // Установка самого левого положения прокрутки (при возможности)
                if (scrollPattern.Current.HorizontallyScrollable)
                {
                    while (scrollPattern.Current.HorizontalScrollPercent > 0.1)
                    {
                        scrollPattern.ScrollHorizontal(ScrollAmount.LargeDecrement);
                    }
                }

                // Основная вертикальная прокрутка
                while (element == null && scrollPattern.Current.VerticalScrollPercent < 99.9)
                {
                    scrollPattern.ScrollVertical(ScrollAmount.LargeIncrement);
                    element = CruciatusCommand.FindFirst(this, getStrategy, 1000);
                }
            }

            if (element == null)
            {
                Logger.Debug("No elements matching {1} were found in {0}.", this, getStrategy);
                return null;
            }

            // Если точка клика элемента под границей списка - докручиваем по вертикали вниз
            while (element.Instance.ClickablePointUnder(this.Instance, scrollPattern))
            {
                scrollPattern.ScrollVertical(ScrollAmount.SmallIncrement);
            }

            // Если точка клика элемента над границей списка - докручиваем по вертикали вверх
            while (element.Instance.ClickablePointOver(this.Instance))
            {
                scrollPattern.ScrollVertical(ScrollAmount.SmallDecrement);
            }

            // Если точка клика элемента справа от границы списка - докручиваем по горизонтали вправо
            while (element.Instance.ClickablePointRight(this.Instance, scrollPattern))
            {
                scrollPattern.ScrollHorizontal(ScrollAmount.SmallIncrement);
            }

            // Если точка клика элемента слева от границы списка - докручиваем по горизонтали влево
            while (element.Instance.ClickablePointLeft(this.Instance))
            {
                scrollPattern.ScrollHorizontal(ScrollAmount.SmallDecrement);
            }

            return element;
        }
コード例 #13
0
ファイル: Menu.cs プロジェクト: Zlabst/Winium.Cruciatus
 /// <summary>
 /// Создает экземпляр меню. Поиск осуществится только при необходимости.
 /// </summary>
 /// <param name="parent">
 /// Родительский элемент.
 /// </param>
 /// <param name="getStrategy">
 /// Стратегия поиска элемента.
 /// </param>
 public Menu(CruciatusElement parent, By getStrategy)
     : base(parent, getStrategy)
 {
 }
コード例 #14
0
 /// <summary>
 /// Создает экземпляр диалогового окна. Поиск осуществится только при необходимости.
 /// </summary>
 /// <param name="parent">
 /// Родительский элемент.
 /// </param>
 /// <param name="getStrategy">
 /// Стратегия поиска элемента.
 /// </param>
 public SaveFileDialog(CruciatusElement parent, By getStrategy)
     : base(parent, getStrategy)
 {
 }
コード例 #15
0
ファイル: CheckBox.cs プロジェクト: Zlabst/Winium.Cruciatus
 /// <summary>
 /// Создает экземпляр чекбокса. Поиск осуществится только при необходимости.
 /// </summary>
 /// <param name="parent">
 /// Родительский элемент.
 /// </param>
 /// <param name="getStrategy">
 /// Стратегия поиска элемента.
 /// </param>
 public CheckBox(CruciatusElement parent, By getStrategy)
     : base(parent, getStrategy)
 {
 }
コード例 #16
0
 internal static CruciatusElement FindFirst(CruciatusElement parent, By strategy)
 {
     return FindFirst(parent, strategy, CruciatusFactory.Settings.SearchTimeout);
 }
コード例 #17
0
 public FirstRibbonTab(CruciatusElement parent, By getStrategy)
     : base(parent, getStrategy)
 {
 }
コード例 #18
0
ファイル: ComboBox.cs プロジェクト: Zlabst/Winium.Cruciatus
        /// <summary>
        /// Прокручивает список до элемента, удовлетворяющего стратегии поиска. 
        /// Возвращает целевой элемент, либо null, если он не найден.
        /// </summary>
        /// <param name="getStrategy">
        /// Стратегия поиска целевого элемента.
        /// </param>
        public CruciatusElement ScrollTo(By getStrategy)
        {
            if (!this.Instance.Current.IsEnabled)
            {
                Logger.Error("Element '{0}' not enabled. Scroll failed.", this.ToString());
                CruciatusFactory.Screenshoter.AutomaticScreenshotCaptureIfNeeded();
                throw new ElementNotEnabledException("NOT SCROLL");
            }

            // Проверка, что выпадающий список раскрыт
            if (this.ExpandCollapseState != ExpandCollapseState.Expanded)
            {
                Logger.Error("Element {0} is not opened.", this);
                throw new CruciatusException("NOT SCROLL");
            }

            var scrollPattern = this.Instance.GetCurrentPattern(ScrollPattern.Pattern) as ScrollPattern;
            if (scrollPattern == null)
            {
                Logger.Error("{0} does not support ScrollPattern.", this);
                throw new CruciatusException("NOT SCROLL");
            }

            // Стартовый поиск элемента
            var element = CruciatusCommand.FindFirst(this, getStrategy, 1000);

            // Вертикальная прокрутка (при необходимости и возможности)
            if (element == null && scrollPattern.Current.VerticallyScrollable)
            {
                // Установка самого верхнего положения прокрутки
                while (scrollPattern.Current.VerticalScrollPercent > 0.1)
                {
                    scrollPattern.ScrollVertical(ScrollAmount.LargeDecrement);
                }

                // Установка самого левого положения прокрутки (при возможности)
                if (scrollPattern.Current.HorizontallyScrollable)
                {
                    while (scrollPattern.Current.HorizontalScrollPercent > 0.1)
                    {
                        scrollPattern.ScrollHorizontal(ScrollAmount.LargeDecrement);
                    }
                }

                // Основная вертикальная прокрутка
                while (element == null && scrollPattern.Current.VerticalScrollPercent < 99.9)
                {
                    scrollPattern.ScrollVertical(ScrollAmount.LargeIncrement);
                    element = CruciatusCommand.FindFirst(this, getStrategy, 1000);
                }
            }

            // Если прокрутив до конца элемент не найден, то его нет (кэп)
            if (element == null)
            {
                Logger.Debug("No elements matching {1} were found in {0}.", this, getStrategy);
                return null;
            }

            var strategy =
                By.AutomationProperty(TreeScope.Subtree, AutomationElement.ClassNameProperty, "Popup")
                    .And(AutomationElement.ProcessIdProperty, this.Instance.Current.ProcessId);
            var popupWindow = CruciatusFactory.Root.FindElement(strategy);
            if (popupWindow == null)
            {
                Logger.Error("Popup window of drop-down list was not found.");
                throw new CruciatusException("NOT SCROLL");
            }

            // Если точка клика элемента под границей списка - докручиваем по вертикали вниз
            var popupWindowInstance = popupWindow.Instance;
            while (element.Instance.ClickablePointUnder(popupWindowInstance, scrollPattern))
            {
                scrollPattern.ScrollVertical(ScrollAmount.LargeIncrement);
            }

            // Если точка клика элемента над границей списка - докручиваем по вертикали вверх
            while (element.Instance.ClickablePointOver(popupWindowInstance))
            {
                scrollPattern.ScrollVertical(ScrollAmount.SmallDecrement);
            }

            // Если точка клика элемента справа от границы списка - докручиваем по горизонтали вправо
            while (element.Instance.ClickablePointRight(popupWindowInstance, scrollPattern))
            {
                scrollPattern.ScrollHorizontal(ScrollAmount.LargeIncrement);
            }

            // Если точка клика элемента слева от границы списка - докручиваем по горизонтали влево
            while (element.Instance.ClickablePointLeft(popupWindowInstance))
            {
                scrollPattern.ScrollHorizontal(ScrollAmount.SmallDecrement);
            }

            return element;
        }