编码UI测试和MessageBox的问题 - 搜索标准

时间:2011-05-30 09:27:43

标签: c# .net winforms coded-ui-tests

我正在将我的UI测试转移到CodedUI测试。现在,我遇到了以下麻烦:

在我的UnitTest中,我两次调用位于我的UIMap中的方法。该方法包含一个片段,用于检查MessageBox窗口是否已打开,并且具有一个布尔参数,用于切换是否单击消息框中的确认或取消按钮。 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分配的搜索条件是其名称(信息)和类名(#32770)。

有人对这里可能出错的地方有任何暗示吗?这是MessageBox控件中的一些辅助功能吗?

此致

的Seb

1 个答案:

答案 0 :(得分:4)

您可以从测试方法刷新地图。所以当你第二次调用partial类中的方法时,只需要输入像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();
    }
}

希望这有帮助。