protected override string DoImpl() { var typeProperty = AutomationElement.ControlTypeProperty; var windows = CruciatusFactory.Root.FindElements(By.AutomationProperty(typeProperty, ControlType.Window)); var handleProperty = AutomationElement.NativeWindowHandleProperty; var handles = windows.Select(element => element.GetAutomationPropertyValue <int>(handleProperty)); return(this.JsonResponse(ResponseStatus.Success, handles)); }
protected override string DoImpl() { var windowHandle = int.Parse(this.ExecutedCommand.Parameters["name"].ToString()); var handleProperty = AutomationElement.NativeWindowHandleProperty; var window = CruciatusFactory.Root.FindElement(By.AutomationProperty(handleProperty, windowHandle)); if (window == null) { throw new AutomationException("Window cannot be found", ResponseStatus.NoSuchElement); } window.SetFocus(); return(this.JsonResponse()); }
public static By GetStrategy(string strategy, string value) { switch (strategy) { case "id": return(By.Uid(value)); case "name": return(By.Name(value)); case "class name": return(By.AutomationProperty(AutomationElementIdentifiers.ClassNameProperty, value)); default: throw new NotImplementedException( string.Format("'{0}' is not valid or implemented searching strategy.", strategy)); } }
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); }
public WindowAppElement SelectedItem() { return (this.FindElement( By.AutomationProperty(TreeScope.Subtree, SelectionItemPattern.IsSelectedProperty, true))); }
/// <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); }