Como faço para acessar um MessageBox com branco?
-
02-07-2019 - |
Pergunta
Eu tenho uma caixa de mensagem simples em uma aplicação WPF que é lançado como abaixo:
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Howdy", "Howdy");
}
posso obter branco para clicar meu botão e lançar a caixa de mensagem.
UISpy o mostra como uma criança da minha janela eu não poderia trabalhar para fora o método para acessá-lo.
Como posso ter acesso ao meu MessageBox para verificar o seu conteúdo?
Solução
Encontrei! A classe de janela tem um método MessageBox que faz o truque:
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);
Outras dicas
Por favor, tente este
Window messageBox = window.MessageBox("");
var label = messageBox.Get<Label>(SearchCriteria.Indexed(0));
Assert.AreEqual("Hello",label.Text);
contidos no código fonte Branco são alguns projetos de testes de interface do usuário (para teste em si Branco).
Um dos teste inclui testes MessageBox, que inclui uma maneira de se obter a mensagem apresentada.
[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();
}
}
Evidentemente, o rótulo usado para exibir a mensagem de texto é de propriedade da janela exibindo o messagebox, e sua identificação primária é a palavra valor máximo (65535).
window.MessageBox () é uma solução boa !!
Mas este método preso por um longo tempo se o messagebox não aparece . Às vezes, eu quero verificar " Não Aparência " de um messagebox ( Aviso, Erro, etc. ). Então eu escrever um método para definir o tempo limite de threading.
[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);
}
}