调用按钮时Thread.CurrentPrincipal丢失单击“使用.NET UI自动化”

时间:2014-03-31 12:08:49

标签: .net ui-automation

我正在尝试使用.NET UI自动化框架来自动化WinForms应用程序上的一些测试。该应用程序包含一些WPF用户控件。

登录到应用程序时,Thread.CurrentPrincipal设置为继承自GenericPrincipal的自定义主体。然后将其用于权限检查。

我已设法自动登录到应用程序并打开一个承载WPF用户控件的表单。在各个点检查Thread.CurrentPrincipal并返回具有自定义类型的正确对象。

当我自动点击WPF用户控件上的按钮时会出现问题:

var btnNewSet = setBuilderView.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.AutomationIdProperty, "btnNewSet"));
btnNewSet.SetFocus();
Thread.Sleep(1500);
btnNewSetInvokePattern = (InvokePattern) btnNewSet.GetCurrentPattern(InvokePattern.Pattern);
btnNewSetInvokePattern.Invoke();

按钮单击事件触发,然后我的应用程序抛出异常,因为Thread.CurrentPrincipal返回基类型GenericPrincipal的对象,而不是先前设置的自定义主体。

上面的代码没有什么特别之处 - 它与我在应用程序中调用WinForms按钮使用的代码相同。

如果我在点击按钮之前停止自动测试,然后用鼠标手动点击按钮,一切正常,当前主体的类型正确。

值得一提的是,应用程序中的WinForms按钮连接到标准的单击事件处理程序,而WPF按钮则绑定到ICommand的实例(例如)。

这看起来像是一个线程问题,但我无法弄清楚。

有谁知道这里会发生什么?

0 个答案:

没有答案