4

我正面临编码 UI 的 WaitForControlExist() 函数的奇怪行为。第二次查询时,即使控件存在,值也会返回false。这是Coded UI的预期行为吗?我的程序看起来类似于下面..

//A sample program that Checks for Run window when "Windows + R" key is pressed

public void TestFunction()
{
   bool isExists = false;

   #region Variable Declarations

   UIMap uiMap = new UIMap();

   WinWindow uIRunWindow = uiMap.UIRunWindow;
   WinComboBox uIOpenComboBox = uiMap.UIRunWindow.UIItemWindow.UIOpenComboBox;
   WinButton uICancelButton = uiMap.UIRunWindow.UICancelWindow.UICancelButton;

   #endregion

   //1st Run

   Keyboard.SendKeys("R", ModifierKeys.Windows);
   isExists = uIRunWindow.WaitForControlExist(7000);
   Console.WriteLine("Is Run Window Appears :: " + isExists); 
   Mouse.Click(uICancelButton);
   Playback.Wait(2000);
   isExists = uIRunWindow.WaitForControlNotExist(7000);
   Console.WriteLine("Is Run Window Closes :: " + isExists);

   //2nd Run 

   Keyboard.SendKeys("R", ModifierKeys.Windows);
   isExists = uIRunWindow.WaitForControlExist(7000);
   Console.WriteLine("Run Window Appears :: " + isExists); 
   Mouse.Click(uICancelButton);
   Playback.Wait(2000);
   isExists = uIRunWindow.WaitForControlNotExist(7000);
   Console.WriteLine("Is Run Window Closes :: " + isExists);

}

在上面的程序中,在第二次运行事件期间,虽然运行窗口存在,但该值返回为 false。

我遇到的解决方法是在第一次和第二次运行中使用 2 个不同的对象,或者重新初始化 UIMap 对象,如下所示

如果在这种情况下有任何其他解决方案或最佳实践,请帮助我

4

2 回答 2

2

由 MSAA/UIAutomation 创建的搜索结果和树被缓存。在控件的搜索配置中,您可以打开 AlwaysSearch 以解决问题,而无需重新创建控件。

于 2012-05-30T12:53:04.090 回答
1

当然,在窗口关闭后, uIRunWindow 引用已“用完”,需要重新初始化。

多次运行测试的完全明智的方法是使用 for() 循环而不是重复相同的语句。在 uiMap 分配之前启动循环,以便获得新的地图。

for (int test = 0; test < 2; ++test) {
    UIMap uiMap = new UIMap();
    // etc..
}
于 2012-05-28T19:16:21.530 回答