我正在编写一些测试并尝试验证某些系统消息框是否正在弹出。就像http://www.dotnetperls.com/messagebox-show一样。但是,MessageBox类用于创建消息框。如何捕获并验证系统生成的系统并对其进行操作?
例如:行动是:
1.click on some execute file.
2.validate a warning messagebox pop up
3.click on yes/no on the messagebox
请提示吗?
答案 0 :(得分:1)
一种选择是使用White自动化框架。
例如:
Window messageBox = WindowFactory.Desktop
.DesktopWindows()
.Find(w => w.Title.Contains("MessageBoxTitle"));
Button ok = messageBox.Get<Button>(SearchCriteria.ByText("OK"));
ok.Click();
答案 1 :(得分:-1)
白色框架+1 !!
您可以查看我发布的用于声明消息框的答案,并使用messageBox.Get()方法单击“确定”按钮。
参考:https://stackoverflow.com/a/35219222/2902212
window.MessageBox()是一个很好的解决方案
但是如果没有出现消息框,这种方法会停留很长时间。有时我想检查消息框的“Not Appearance”(警告,错误等)。所以我写了一个通过线程设置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);
}
}