/// <summary> /// Возвращает текст элемента. /// </summary> /// <param name="strategy"> /// Стратегия получения элемента. /// </param> public string Text(GetTextStrategies strategy) { if (strategy == GetTextStrategies.None) { strategy = ~strategy; } string text; if (strategy.HasFlag(GetTextStrategies.TextPattern)) { if (CruciatusCommand.TryGetTextUsingTextPattern(this, out text)) { return(text); } } if (strategy.HasFlag(GetTextStrategies.ValuePattern)) { if (CruciatusCommand.TryGetTextUsingValuePattern(this, out text)) { return(text); } } Logger.Error("Get text from '{0}' element failed.", this.ToString()); CruciatusFactory.Screenshoter.AutomaticScreenshotCaptureIfNeeded(); throw new CruciatusException("NO GET TEXT"); }
/// <summary> /// Клик по элементу. /// </summary> /// <param name="button"> /// Используемая кнопка мыши. /// </param> /// <param name="strategy"> /// Стратегия клика. /// </param> /// <param name="doubleClick"> /// Флаг двойного клика. /// </param> public void Click(MouseButton button, ClickStrategies strategy, bool doubleClick) { if (!this.Instance.Current.IsEnabled) { Logger.Error("Element '{0}' not enabled. Click failed.", this.ToString()); CruciatusFactory.Screenshoter.AutomaticScreenshotCaptureIfNeeded(); throw new ElementNotEnabledException("NOT CLICK"); } if (strategy == ClickStrategies.None) { strategy = ~strategy; } if (strategy.HasFlag(ClickStrategies.ClickablePoint)) { if (CruciatusCommand.TryClickOnClickablePoint(button, this, doubleClick)) { return; } } if (strategy.HasFlag(ClickStrategies.BoundingRectangleCenter)) { if (CruciatusCommand.TryClickOnBoundingRectangleCenter(button, this, doubleClick)) { return; } } if (strategy.HasFlag(ClickStrategies.InvokePattern)) { if (CruciatusCommand.TryClickUsingInvokePattern(this, doubleClick)) { return; } } Logger.Error("Click on '{0}' element failed", this.ToString()); throw new CruciatusException("NOT CLICK"); }
/// <summary> /// Поиск элементов. /// Возвращает целевой элемент, либо null, если он не найден. /// </summary> /// <param name="strategy"> /// Стратегия поиска. /// </param> public IEnumerable <CruciatusElement> FindElements(By strategy) { return(CruciatusCommand.FindAll(this, strategy)); }
/// <summary> /// Поиск элемента. /// Возвращает целевой элемент, либо null, если он не найден. /// </summary> /// <param name="strategy"> /// Стратегия поиска. /// </param> public virtual CruciatusElement FindElement(By strategy) { return(CruciatusCommand.FindFirst(this, strategy)); }
/// <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); }
public WindowAppElement 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); }
/// <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("Элемент {0} не развернут.", this); throw new CruciatusException("NOT SCROLL"); } var scrollPattern = this.Instance.GetCurrentPattern(ScrollPattern.Pattern) as ScrollPattern; if (scrollPattern == null) { Logger.Error("{0} не поддерживает 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("В {0} нет элемента '{1}'.", 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 окно выпадающего списка."); 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); }
public WindowAppElement 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); }