我想用Mircosoft UI自动化框架在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");
}发布于 2012-06-22 08:32:08
您可以使用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。
https://stackoverflow.com/questions/10720162
复制相似问题