如何使用白色访问MessageBox?

时间:2008-09-27 14:48:52

标签: wpf testing integration-testing white

我在WPF应用程序中有一个简单的消息框,如下所示:

private void Button_Click(object sender, RoutedEventArgs e)
{
   MessageBox.Show("Howdy", "Howdy");
}

我可以white点击我的按钮并启动消息框。

UISpy将其显示为我窗口的子项我无法找到访问它的方法。

如何访问MessageBox以验证其内容?

4 个答案:

答案 0 :(得分:3)

发现它! window类有一个MessageBox方法可以解决这个问题:

        var app = Application.Launch(@"c:\ApplicationPath.exe");
        var window = app.GetWindow("Window1");
        var helloButton = window.Get<Button>("Hello");
        Assert.IsNotNull(helloButton);
        helloButton.Click();
        var messageBox = window.MessageBox("Howdy");
        Assert.IsNotNull(messageBox);

答案 1 :(得分:3)

请试试这个

       Window messageBox = window.MessageBox("");
       var label = messageBox.Get<Label>(SearchCriteria.Indexed(0));
       Assert.AreEqual("Hello",label.Text);

答案 2 :(得分:1)

包含在White源代码中的是一些UI测试项目(用于测试White本身)。

其中一项测试包括MessageBox测试,其中包括获取显示消息的方法。

[TestFixture, WinFormCategory, WPFCategory]
public class MessageBoxTest : ControlsActionTest
{
    [Test]
    public void CloseMessageBoxTest()
    {
        window.Get<Button>("buttonLaunchesMessageBox").Click();
        Window messageBox = window.MessageBox("Close Me");
        var label = window.Get<Label>("65535");
        Assert.AreEqual("Close Me", label.Text);
        messageBox.Close();
    }

    [Test]
    public void ClickButtonOnMessageBox()
    {
        window.Get<Button>("buttonLaunchesMessageBox").Click();
        Window messageBox = window.MessageBox("Close Me");
        messageBox.Get<Button>(SearchCriteria.ByText("OK")).Click();
    }
}

显然,用于显示文本消息的标签由显示消息框的窗口所有,其主要标识是最大字值(65535)。

答案 3 :(得分:1)

window.MessageBox()是一个很好的解决方案!!

但如果消息框不显示,此方法会长时间停留。有时我想检查&#34; 不显示&#34;消息框(警告,错误等)。所以我写了一个通过线程设置timeOut的方法。

gulp.task('test:e2e', function () {
    var argv.testProfiles = 'system';
    var testProfiles = {
                e2e: '/e2e/**/*.js',
                system: '/system/**/*.js'
            };
gulp.src([resolvedPath]) //where resolvedPath = '/system/**/*.js'
    .pipe();
}