白色UIAutomation click()停止在不同平台上工作

时间:2011-04-12 06:54:37

标签: c# wpf bdd ui-automation white

我正在使用White来自动化我们的C#WPF UI的BDD测试。

我的第一批测试在我的开发机器上运行良好(运行Windows 7)。但是,当我尝试在构建服务器(运行Windows Server 2003 R2的虚拟机)上运行相同的代码时,它无法正常工作。在这两种情况下,测试都是从命令行运行的,测试使用的是Cuke4Nuke框架。在服务器的情况下,我通过远程桌面连接访问服务器。

代码如下:

var application = Application.Launch("whiteApp.exe");
var initializeOption = InitializeOption.NoCache;
var windowCriteria = SearchCriteria.ByText("whiteApp");
var window = application.GetWindow(criteria, initializeOption);
var criteria = SearchCriteria.ByAutomationId("rightButton");
var button = (Button) window.Get(criteria);
button.click();

问题是在服务器上运行按钮单击事件时不会触发它。如果在白方执行完毕后UI处于打开状态,则可以单击该按钮(使用鼠标)。一个有趣的观点是,在运行click方法后,按钮确实显示了被点击的证据,如下图所示,在其他按钮的情况下,显示了鼠标悬停效果。

Button before and after click

4 个答案:

答案 0 :(得分:6)

我不确定这是不是你的问题,但我注意到White在使用AnyCPU平台构建的应用程序使用并在64位系统上运行时会遇到一些问题。出于某种原因,无论何时尝试在这些条件下移动鼠标,它都会自动将鼠标推到屏幕底部而不是请求的位置。这意味着单击命令会忽略它被告知单击的按钮。

如果您将自动化应用程序构建为x86应用程序,White会正确自动化鼠标。

答案 1 :(得分:0)

在我的本地Windows 7 x64机器上,它也是如此。

不知道它是否有用,但使用button.RaiseClickEvent();似乎工作正常。我认为这会在不点击按钮或smt的情况下引发事件。

答案 2 :(得分:0)

我知道这是一个古老的问题,但前几天我碰到了它,并认为我的回答可能对其他人有用......

我在64位Win7机器上运行带有NUnit的Project White。为了使它适用于我,我必须确保测试是在32位进程中运行的。

我使用的是TestDriven.Net插件。它可以选择将任何CPU测试运行为32位或64位。

答案 3 :(得分:0)

正如Harry在回答中提到的那样,在x86模式下强制自动化应用程序(测试应用程序)确实有效。

然而,真正的问题是由怀特本身创造的。在White关于codeplex的讨论页面上,Hachima发布了对White源代码的修改,以确保它在x86和x64下工作:http://white.codeplex.com/discussions/228433