2008-09-27 3 views
4

У меня есть простое окно сообщения в приложении WPF, который запускается, как показано ниже:Как получить доступ к MessageBox с белым цветом?

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

я могу получить white нажать мою кнопку и запустить окно сообщения.

UISpy показывает это как дочерний элемент моего окна. Я не смог обработать метод доступа к нему.

Как получить доступ к моему MessageBox, чтобы проверить его содержимое?

ответ

3

Найденный! Класс окна имеет метод 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

Как насчет получения сообщения в окне сообщения? Кажется, я ничего не могу найти в Белом. Я думаю, что очень важно утверждать, что сообщение правильное.

1

Содержащиеся в белом исходном коде некоторые проекты тестирования пользовательского интерфейса (для проверки самого белого).

Один из тестов включает тесты 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(); 
    } 
} 

Очевидно, что метка используется для отображения текстового сообщения принадлежит окно, отображающее MessageBox, и его первичная идентификация является максимальное значение слова (65535).

3

Пожалуйста, попробуйте этот

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

window.MessageBox() является хорошим решением !!

Но этот метод застрял в течение длительного времени если MessageBox не появляется. Иногда я хочу проверить «Not App» (Предупреждение, ошибка и т. Д.). Поэтому я пишу метод для установки 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); 
    } 
} 
Смежные вопросы