Отправка кликов в AutomationElement без InvokePattern
С помощью AutomationElement
Есть ли способ отправить клики на TabItem
без необходимости перемещать мышь и симулировать щелчки? AutomationElement
для меня все еще ново - насколько я понимаю, если только он не поддерживает InvokePattern
(что TabItem не делает), вы должны идти по пути определения местоположения элемента управления и моделирования мыши. У меня есть этот код работает (см. Ниже) - мне просто любопытно, если это мой вариант.
AutomationElement tabControl = GetControl(window, "NOTEBOOK");
AutomationElement tabGeneral = GetControl(tabControl, "FM_STAFF_SUB_P1");
AutomationElementCollection tabs = GetAllTabs(window, tabGeneral);
System.Windows.Point p = tabs[1].GetClickablePoint();
MoveMouse((int)p.X, (int)p.Y);
ClickMouse();
Спасибо.
1 ответ
- Пытаться
tab.SetFocus()
- Получить все поддерживаемые шаблоны (
tab.GetSupportedPatterns()
), а затем посмотрите, какие из них поддерживаются для реализации этой вкладки. Он должен поддерживать SelectionItemPattern, поэтому используйте:((SelectionItemPattern)tab.GetCurrentPattern(SelectionItemPattern.Pattern)).Select()
- использование
SendKeys
к окну, чтобы перемещаться по вкладкам (в большинстве случаев имеется горячая клавиша для перемещения между ними. Вы можете комбинировать, проверяя после каждой навигации, выбрана ли вкладка. - Если все вышеперечисленное не сработало, я думаю, щелчок мышью - единственный вариант.
У меня была аналогичная проблема с добавлением горячих клавиш к элементам вкладок. В моем случае простой выбор элемента вкладки даст ему фокус, но не покажет содержимое вкладки, когда оно было динамически сгенерировано. Если я не правильно понял ваш вопрос, в этом примере будет имитироваться щелчок по элементу вкладки с помощью TabItemAutomationPeer.
//get the TabItem
TabItem tabItem = (TabItem)sender; //or however you are getting it.
//get the TabControl
TabControl tabControl = UIHelper.FindLogicalParent<TabControl>(tabItem); //or however you are getting it.
//do that magic
tabItem.IsSelected = true;
TabControlAutomationPeer tabControlAutomationPeer = new TabControlAutomationPeer(tabControl);
TabItemAutomationPeer tabItemAutomationPeer = new TabItemAutomationPeer(tabItem, tabControlAutomationPeer);
tabItemAutomationPeer.SetFocus(); //works like a click