2014-05-08 105 views
3

我正在编写一些测试,并尝试验证某些系统消息框弹出。像在http://www.dotnetperls.com/messagebox-show。但是,MessageBox类用于创建消息框。我应该如何捕获和验证生成的系统并对其进行操作?如何验证c#中的消息框弹出窗口?

例如:行动是:

1.click on some execute file. 
    2.validate a warning messagebox pop up 
    3.click on yes/no on the messagebox 

任何暗示吗?

+0

也许你可以使用AutoIt的,看看http://www.autoitscript.com/site/autoit/ – yosbel

+0

这将是一个有点昂贵..但感谢您的建议 –

回答

1

一个选择是使用White自动化框架。

例如:

Window messageBox = WindowFactory.Desktop 
           .DesktopWindows() 
           .Find(w => w.Title.Contains("MessageBoxTitle")); 
Button ok = messageBox.Get<Button>(SearchCriteria.ByText("OK")); 
ok.Click(); 
+0

这对我的作品。谢谢您的帮助! –

-1

白色框架+1!

你可以检查我发布的用于声明消息框的回答,并使用messageBox.Get()方法单击确定按钮。

编号:https://stackoverflow.com/a/35219222/2902212

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

但会停留很长一段时间这种方法,如果消息框不会出现。有时我想检查一个消息框的“不显示”(警告,错误等)。所以我写了一个方法来通过线程来设置timeOut。

[TestMethod] 
public void TestMethod() 
{ 
    // arrange 
    var app = Application.Launch(@"c:\ApplicationPath.exe"); 
    var targetWindow = app.GetWindow("Window1"); 
    Button button = targetWindow.Get<Button>("Button"); 

    // act 
    button.Click();   

    var actual = GetMessageBox(targetWindow, "Application Error", 1000L); 

    // assert 
    Assert.IsNotNull(actual); // I want to see the messagebox appears. 
    // Assert.IsNull(actual); // I don't want to see the messagebox apears. 
} 

private void GetMessageBox(Window targetWindow, string title, long timeOutInMillisecond) 
{ 
    Window window = null ; 

    Thread t = new Thread(delegate() 
    { 
     window = targetWindow.MessageBox(title); 
    }); 
    t.Start(); 

    long l = CurrentTimeMillis(); 
    while (CurrentTimeMillis() - l <= timeOutInMillsecond) { } 

    if (window == null) 
     t.Abort(); 

    return window; 
} 

public static class DateTimeUtil 
{ 
    private static DateTime Jan1st1970 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 
    public static long currentTimeMillis() 
    { 
     return (long)((DateTime.UtcNow - Jan1st1970).TotalMilliseconds); 
    } 
}