Программный поиск окна сообщения и генерация нажатия на кнопку - PullRequest
3 голосов
/ 05 августа 2009

Я пытаюсь автоматизировать тестирование приложения winform. Я запускаю его в том же процессе, что и тестовый код, поэтому довольно легко найти элементы управления .Net и имитировать действия пользователя над ними. Однако я немного застрял в окне сообщения (созданного с использованием стандартного метода MessageBox.Show). Как я могу получить это и имитировать, что кнопка нажата?

Ответы [ 6 ]

6 голосов
/ 05 августа 2009

Я бы посоветовал лечить основное заболевание, а не симптом. Потратьте несколько минут, чтобы прочитать эти

Короче говоря, используйте интерфейс, чтобы отделить все всплывающие окна модального диалога - что является болью в шее для автоматизации тестирования пользовательского интерфейса. Затем вы можете заменить фиктивную реализацию интерфейса, которая ничего не делает или возвращает предопределенные значения теста. Реальная реализация, конечно, выдает фактическое диалоговое окно модально ... как-то так (из 2-ой ссылки)

public class UserInterrogator : IUserInterrogator
{
    private Form owner;

    public UserInterrogator(Form owner)
    {  this.owner = owner;    }

    public Font GetFontFromUser()  // member of the IUserInterrogator interface
    {
        FontDialog fd = new FontDialog();
        fd.ShowDialog( owner );
        return fd.Font;
    }
}

Более простой подход, конечно, написать некоторый код, который находит диалог и закрывает / убивает его. Я видел, как некоторые люди добились определенных успехов с Win32 API и NUnitForms ...

3 голосов
/ 05 августа 2009
  • codeplex.com / white - бесплатно

  • testautomationfx.com - Коммерческий, но очень хороший

2 голосов
/ 05 августа 2009

Одним из лучших бесплатных инструментов является AutoHotKey .

2 голосов
/ 05 августа 2009

Если вы знаете заголовок (и он уникален), вы можете перебрать Application.OpenForms, чтобы найти его.

2 голосов
/ 05 августа 2009

Вам, вероятно, придется использовать вызовы WinAPI (FindWindowEx и т. Д.) И отправлять сообщения LMB вниз и вверх на дескриптор кнопки.

0 голосов
/ 05 августа 2009

Вы можете использовать autoit систему сценариев.

Но я предлагаю разделить GUI и реализацию , потому что базовый принцип модульного тестирования - это «модуль», где модулем является класс, отделенный от других классов или реального мира.
Этот принцип дает вам хороший дизайн класса и помогает избежать извержения программного обеспечения и много других хороших вещей ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...