我试图自动化一些UI测试。一旦你点击一个按钮,我有一个窗口可以基于一些文本框来计算某些东西。我已经正确地点击了按钮,但是我无法正确地获得分组的结果,因为在我检查测试中的正确答案之后正在调用calculate()方法。等待InvokePattern.Invoke()
InvokePattern pattern = element.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern;
pattern.Invoke();
调用的invoke()不阻塞,因此,它立即返回,然后开始检查是否calculate()
工作,即使它没有被称为呢。如何更改Invoke()调用,以便在调用calculate()之后等待?我的按钮是AutomationElement
。
private void Button_Click(object sender, RoutedEventArgs e)
{
double v1 = 0;
double v2 = 0;
if(Double.TryParse(tbVal1.Text, out v1) && Double.TryParse(tbVal2.Text, out v2))
{
double output = v1 + v2;
tbAnswer.Text = "The answer is " + output.ToString();
}
}
编辑: 我结束了订阅的的InvokePattern.InvokedEvent事件采取到我的解决方案不同的路线。这使我能够将所需的任何逻辑放入事件处理程序,以对AutomationElement的调用作出反应。
InvokePattern pattern = element.GetCurrentPattern(InvokePattern.Pattern) as InvokePattern;
Automation.AddAutomationEventHandler(InvokePattern.InvokedEvent, element, TreeScope.Element,
new AutomationEventHandler(OnUIAutomationEvent));
pattern.Invoke();
让我知道是否需要添加其他东西。谢谢!
你在哪里调用Invoke?你是否在另一个线程中调用它,因为从你的描述来看,你听起来像在UI线程中调用它,这是没有意义的。 – alexD 2011-05-25 18:18:54
我只是为了简单而在处理程序内部计算代码。我可以直接调用calculate方法,但我也希望通过自动化按钮点击来查看UI上的影响。我不认为从UI线程调用Invoke是问题,因为invoke立即返回,并且在调用时没有任何阻塞。 – wangburger 2011-05-25 18:19:21