编码的UI测试和MessageBox出现问题-搜索条件

问题描述

|| 我目前正在将UI测试移至CodedUI测试。目前,我面临以下麻烦: 在我的UnitTest中,我两次调用了位于UIMap中的方法。该方法包含一个片段,该片段检查MessageBox窗口是否已打开,并具有一个布尔参数,用于切换是单击消息框中的确认还是取消按钮。消息框永远不会改变(意味着其标题,文本,按钮)。
public void MyUiMethod(bool p)
{
    //...variable initialization...
    ApplicationUnderTest app = ApplicationUnderTest.Launch(@\"some.exe\");
    try
    {
        //... get to the point that triggers the MB to show...
        Assert.AreEqual(true,uImessageBoxWindow.Exists);
        if (p)
            Mouse.Click(uIConfirmButton,new Point(39,16));
        else
            Mouse.Click(uICancelButton,new Point(49,8));
    }
    finally
    {
        app.Close();
    }
}
每次通话均无任何问题。 在第二个呼叫期间,将弹出“消息框”,但测试框架无法定位。 CodedUiTestBuilder分配给MessageBox搜索条件是其名称(Info)和类名(#32770)。 有人对这里可能出什么问题有任何暗示吗? MessageBox控件中是否缺少某些可访问性? 问候, 塞布     

解决方法

        您可以通过测试方法刷新地图。因此,当您第二次在局部类中调用该方法时,只需将类似UIMap的名称放到MapName = new UIMap();中。然后,这将刷新地图,您可以再次调用窗口而不会出现刷新问题。
public void MyUiMethod(bool p)
{
    UIMap MapName = new UIMap();

    //...variable initialization...
    ApplicationUnderTest app = ApplicationUnderTest.Launch(@\"some.exe\");
    try
    {
        //... get to the point that triggers the MB to show...
        Assert.AreEqual(true,MapName.uImessageBoxWindow.Exists);

        UIMap MapName = new UIMap();
        if (p)
            Mouse.Click(MapName.uIConfirmButton,new Point(39,16));
        else
            Mouse.Click(MapName.uICancelButton,new Point(49,8));
    }
    finally
    {
        app.Close();
    }
}
希望这可以帮助。