使用自动化框架在textfield / textbox上设置文本并获取更改事件
我想使用Mircosoft UI Automation框架在textfield / textbox元素上设置文本,这意味着在ControlType.Edit
或ControlType.Document
的AutomationElement
。
目前我正在使用TextPattern
从其中一个AutomationElements
获取文本:
TextPattern tp = (TextPattern)element.GetCurrentPattern(TextPattern.Pattern); string text = tp.DocumentRange.GetText(-1).Trim();
但是现在我想在AutomationElement
设置一个新文本。 我在TextPattern
类中找不到这个方法。 所以我正在尝试使用ValuePattern
但我不确定这是否是正确的方法:
ValuePattern value = element.GetCurrentPattern(ValuePattern.Pattern) as ValuePattern; value.SetValue(insertText);
还有其他方法来设置文本值吗?
另一个问题是如何在Edit
/ Document
元素上更改文本时获取事件? 我尝试使用TextChangedEvent
但是在更改文本时我没有触发任何事件:
AutomationEventHandler ehTextChanged = new AutomationEventHandler(text_event); Automation.AddAutomationEventHandler(TextPattern.TextChangedEvent, element, TreeScope.Element, ehTextChanged); private void text_event(object sender, AutomationEventArgs e) { Console.WriteLine("Text changed"); }
您可以使用ValuePatern,这是它的方法。 从我自己的代码:
ValuePattern etb = EditableTextBox.GetCurrentPattern(ValuePattern.Pattern) as ValuePattern; etb.SetValue("test");
您可以使用以下方式注册Event
:
var myEventHandler= new AutomationEventHandler(handler); Automation.AddAutomationEventHandler( SelectionItemPattern.ElementSelectedEvent, // In your case you might want to use another pattern targetApp, TreeScope.Descendants, myEventHandler);
和handler
方法:
private void handler(object src, AutomationEventArgs e) {...}
还有一个AutomationPropertyChangedEventHandler
(在本例中使用Automation.AddAutomationPropertyChangedEventHandler(...)
)可能很有用。
基于MSDN的此示例 。