Поделиться через


Пошаговое руководство. Создание, изменение и обслуживание закодированного теста пользовательского интерфейса

В этом пошаговом руководстве создается простое приложение Windows Presentation Foundation (WPF), чтобы с его помощью продемонстрировать создание, редактирование и обслуживание закодированного теста пользовательского интерфейса. В этом пошаговом руководстве приведены решения для корректировки тестов с проблемами, связанными со временем и рефакторингом элементов управления.

Обязательные компоненты

Для этого пошагового руководства требуется следующее:

  • Visual Studio 2010 Ultimate или Visual Studio 2010 Premium.

Создание простого приложения WPF

  1. В меню Файл выберите команду Создать и выберите Проект.

    Откроется диалоговое окно Новый проект.

  2. В области Установленные шаблоны разверните узел Visual C# и выберите Windows.

  3. Над средней областью проверьте, что в раскрывающемся списке требуемой версии .NET Framework выбрано .NET Framework 4.

  4. В средней области выберите шаблон Приложение WPF.

  5. В текстовом поле Имя введите "SimpleWPFApp".

  6. Выберите папку для хранения проекта. В текстовом поле Расположение введите имя папки.

  7. Нажмите кнопку ОК.

    Откроется конструктор WPF для Visual Studio, где будет открыто окно MainWindow проекта.

  8. Если панель элементов еще не открыта, откройте ее. Щелкните меню Вид и выберите пункт Панель элементов.

  9. В разделе Все элементы управления WPF перетащите элементы управления Кнопка, CheckBox и ProgressBar в окно MainWindow в рабочей области конструирования.

  10. Выберите элемент управления "Кнопка". В окне "Свойства" измените значение свойства Content с Button на "Start".

  11. Выберите элемент управления ProgressBar. В окне "Свойства" измените значение свойства Maximum с 100 на 1000.

  12. Выберите элемент управления Checkbox. В окне "Свойства" очистите свойство IsEnabled.

    Простое приложение WPF

  13. Дважды щелкните элемент управления "Кнопка", чтобы добавить событие Click.

    В редакторе кода откроется файл MainWindow.xmal.cs, курсор будет установлен на новом событии button1_Click.

  14. В начале класса MainWindow добавьте делегат. Этот делегат будет использоваться для индикатора выполнения. Чтобы добавить делегат, добавьте следующий код.

            private delegate void ProgressBarDelegate(
            System.Windows.DependencyProperty dp, Object value);
    
  15. В метод button1_Click добавьте следующий код.

                double progress = 0;
    
                ProgressBarDelegate updatePbDelegate =
            new ProgressBarDelegate(progressBar1.SetValue);
    
                do
                {
                    progress ++;
    
                    Dispatcher.Invoke(updatePbDelegate,
                        System.Windows.Threading.DispatcherPriority.Background,
                        new object[] { ProgressBar.ValueProperty, progress });
                    progressBar1.Value = progress;
                }
                while (progressBar1.Value != progressBar1.Maximum);
    
                checkBox1.IsEnabled = true;
    

Проверка корректной работы приложения WPF

  1. В меню Отладка выберите Начать отладку или нажмите клавишу F5.

  2. Нажмите кнопку Пуск.

    Через несколько секунд индикатор выполнения должен дойти до 100%. Элемент управления "Checkbox" теперь включен.

  3. Закройте приложение SimpleWPFApp.

Создание и запуск закодированного теста пользовательского интерфейса для приложения SimpleWPFApp

  1. В обозревателе решений щелкните правой кнопкой мыши решение, щелкните Добавить и выберите Новый проект.

    Откроется диалоговое окно Добавление нового проекта.

  2. В области Установленные шаблоны разверните узел Visual C# и выберите Тест.

  3. В средней области выберите шаблон Тестовый проект.

  4. Нажмите кнопку ОК.

    Новый тестовый проект с именем TestProject1 будет добавлен в обозревателе решений в ваше решение, а в редакторе кода появится файл UnitTest1.cs. Файл UnitTest1.cs можно закрыть, в этом пошаговом руководстве он не используется.

  5. В обозревателе решений щелкните правой кнопкой мыши тестовый проект TestProject1, щелкните Добавить и выберите пункт Кодированный тест ИП.

    Откроется диалоговое окно Сформировать код для кодированного теста ИП.

  6. Выберите параметр Записать действия, изменить карту ИП или добавить утверждения и нажмите кнопку ОК.

    Откроется окно "UIMap – Построитель кодированных тестов ИП".

    Дополнительные сведения о параметрах в этом диалоговом окне см. в разделе Практическое руководство. Создание закодированного теста пользовательского интерфейса.

  7. Найдите и запустите созданное ранее приложение SimpleWPFApp. По умолчанию приложение расположено по пути C:\Users\<имя_пользователя>\Documents\Visual Studio 2010\Projects\SimpleWPFApp\SimpleWPFApp\bin\Debug\SimpleWPFApp.exe

  8. Создайте на рабочем столе ярлык для приложения SimpleWPFApp. Щелкните правой кнопкой мыши файл SimpleWPFApp.exe и выберите команду Копировать. Щелкните правой кнопкой мыши на рабочем столе и выберите Вставить ярлык.

    Совет

    Ярлык облегчает добавление и изменение закодированных тестов пользовательского интерфейса для приложения, так как позволяет быстро запустить приложение.Не требуется переходить в каталог приложения.В ходе этого пошагового руководства вам потребуется еще раз запустить приложение.

  9. Щелкните Начать запись в окне "UIMap – Построитель кодированных тестов ИП". Через несколько секунд построитель кодированных тестов ИП будет готов к работе.

  10. С помощью ярлыка на рабочем столе запустите приложение SimpleWPFApp.exe.

  11. В приложении SimpleWPFApp щелкните Пуск.

    Через несколько секунд индикатор выполнения должен дойти до 100%. Элемент управления "Checkbox" теперь включен.

  12. Выберите поле для элемента управления CheckBox.

  13. Закройте приложение SimpleWPFApp.

  14. В окне "UIMap - Построитель кодированных тестов ИП" щелкните Сформировать код.

  15. В поле имени метода введите "SimpleAppTest" и нажмите кнопку Добавить и сформировать. Через несколько секунд закодированный тест пользовательского интерфейса будет сформирован и добавлен в решение.

  16. Закройте окно "UIMap – Построитель кодированных тестов ИП".

    В редакторе кода откроется файл CodedUITest1.cs.

Запустите закодированный тест пользовательского интерфейса.

  • В файле CodedUITest1.cs найдите метод CodedUITestMethod, щелкните его правой кнопкой мыши и выберите Выполнить тесты.

    Пока выполняется закодированный тест пользовательского интерфейса, открыто приложение SimpleWPFApp. Выполняются шаги, которые вы выполняли в предыдущей процедуре. Однако когда тест попытается установить флажок для элемента управления CheckBox, в окне результатов теста появится сообщение, что тест не пройден. Это происходит потому, что тест пытается установить флажок, но не учитывает, что элемент управления CheckBox недоступен, пока индикатор выполнения не дойдет до 100%. Эту и аналогичные проблемы можно решить с помощью различных методов UITestControl.WaitForControlXXX(), которые доступны для кодированных тестов пользовательского интерфейса. В следующей процедуре демонстрируется использование метода WaitForControlEnabled() для исправления ошибки, в результате которой тест выполнен неудачно. Дополнительные сведения см. в разделе Настройка закодированного теста пользовательского интерфейса таким образом, чтобы во время воспроизведения он дожидался определенных событий.

Редактирование и повторный запуск закодированного теста пользовательского интерфейса

  1. В окне Результаты теста щелкните правой кнопкой мыши неудачный тест и выберите команду "Просмотреть подробные результаты теста".

    Отобразится CodedUITestMethod1[Results].

  2. В разделе Трассировка стека ошибок щелкните первую ссылку рядом с TestProject1.UIMap.SimpleAppTest().

    Откроется файл UIMap.Designer.cs, где в коде будет выделено место ошибки.

    // Select 'CheckBox' check box
    uICheckBoxCheckBox.Checked = this.SimpleAppTestParams.UICheckBoxCheckBoxChecked;
    
  3. Для исправления ошибки можно с помощью метода WaitForControlEnabled() сделать так, чтобы закодированный тест пользовательского интерфейса ждал включения элемента управления CheckBox перед переходом к этой строке.

    Предупреждение

    Не изменяйте файл UIMap.Designer.cs.Любые изменения кода, внесенные в файл UIMapDesigner.cs, будут перезаписываться каждый раз при создании кода с помощью построителя кодированных тестов ИП.Если требуется изменить записанный метод, необходимо скопировать его в файл UIMap.cs и переименовать.Файл UIMap.cs можно использовать для переопределения методов и свойств в файле UIMapDesigner.cs.Необходимо удалить ссылку на исходный метод в файле CodedUITest.cs и заменить ее именем переименованного метода.

  4. В файле UIMapDesinger.cs выберите целиком код метода SimpleAppTest и скопируйте его.

  5. В обозревателе решений откройте файл UIMap.cs.

  6. Вставьте код метода SimpleAppTest в разделяемый класс UIMap.

  7. Переименуйте метод из SimpleAppTest() в ModifiedSimpleAppTest().

  8. Добавьте в файл следующую инструкцию.

    using Microsoft.VisualStudio.TestTools.UITesting.WpfControls;
    
  9. Перед найденной ранее строкой кода с ошибкой добавьте следующий метод WaitForControlEnabled().

    uICheckBoxCheckBox.WaitForControlEnabled();
    
    // Select 'CheckBox' check box
    uICheckBoxCheckBox.Checked = this.SimpleAppTestParams.UICheckBoxCheckBoxChecked;
    
  10. В файле CodedUITest1.cs найдите метод CodedUITestMethod и либо закомментируйте его, либо переименуйте ссылку на исходный метод SimpleAppTest() и замените его на новый метод ModifiedSimpleAppTest().

    [TestMethod]
            public void CodedUITestMethod1()
            {
                // To generate code for this test, select "Generate Code for Coded UI Test" from the shortcut menu and select one of the menu items.
                // For more information on generated code, see https://go.microsoft.com/fwlink/?LinkId=179463
                //this.UIMap.SimpleAppTest();
                this.UIMap.ModifiedSimpleAppTest();
            }
    
  11. В меню Построение выберите Построить решение.

  12. Щелкните правой кнопкой мыши метод CodedUITestMethod и выберите команду Выполнить тесты.

  13. Теперь закодированный тест пользовательского интерфейса успешно выполнит все этапы тестирования, в окне результатов теста будет показано сообщение Тест пройден.

Рефакторинг элемента управления в приложении SimpleWPFApp

  1. В конструкторе в файле MainWindow.xaml выберите элемент управления "Кнопка".

  2. В верхней части окна "Свойства" выберите рядом с элементом Кнопка значение button1 и измените его на "buttonA".

  3. В меню Построение выберите Построить решение.

  4. В меню Тест выберите Окна и щелкните Представление теста.

  5. В представлении теста в столбце Имя теста выберите CodedUITestMethod1, а затем на панели инструментов щелкните Выполнить выделенный фрагмент.

    Тест не был пройден, поскольку закодированный тест пользовательского интерфейса не смог обнаружить кнопку, которая раньше была сопоставлена в UIMap как button1. Таким образом рефакторинг может влиять на закодированные тесты пользовательского интерфейса.

  6. В окне "Результаты теста" щелкните правой кнопкой мыши неудачный тест и выберите команду Просмотреть подробные результаты теста.

    Отобразится CodedUITestMethod1[Results].

  7. В разделе Трассировка стека ошибок щелкните первую ссылку рядом с TestProject1.UIMap.SimpleAppTest().

    Откроется файл UIMap.Designer.cs. В коде выделено место, где произошла ошибка.

    // Click 'Start' button
    Mouse.Click(uIStartButton, new Point(27, 10));
    

    Обратите внимание, что в строке кода, приведенной ранее в этой процедуре, используется имя UiStartButton — имя UIMap до рефакторинга.

    Чтобы исправить ошибку, можно добавить элемент управления, для которого был выполнен рефакторинг, в UIMap с помощью построителя кодированных тестов ИП. Можно обновить код теста для использования кода, как показано в следующей процедуре.

Сопоставление элемента управления, для которого был выполнен рефакторинг; редактирование и повторный запуск закодированного теста пользовательского интерфейса

  1. В файле CodedUITest1.cs в методе CodedUITestMethod1() щелкните правой кнопкой мыши, выберите Сформировать код для кодированного теста ИП и щелкните Использовать построитель кодированных тестов ИП.

    Откроется окно "UIMap – Построитель кодированных тестов ИП".

  2. В помощью созданного ранее ярлыка на рабочем столе запустите созданное ранее приложение SimpleWPFApp.

  3. В окне "UIMap – Построитель кодированных тестов ИП" переместите инструмент в виде перекрестия на кнопку Пуск приложения SimpleWPFApp.

    Кнопка Пуск будет заключена в голубую рамку, построителю кодированных тестов ИП потребуется несколько секунд, чтобы обработать данные для выбранного элемента управления и отобразить его свойства. Обратите внимание, что AutomationUId называется buttonA.

  4. В окне свойств элемента управления щелкните стрелку в левом верхнем углу, чтобы открыть карту элементов управления ИП. Обратите внимание, что выбран элемент UIStartButton1.

  5. На панели инструментов щелкните Добавить элемент управления на карту элементов управления ИП.

    Сообщение о состоянии в нижней части окна подтвердит действие следующим сообщением: Выбранный элемент управления добавлен на карту элементов управления ИП.

  6. В окне "UIMap – Построитель кодированных тестов ИП" щелкните Сформировать код.

    Отобразится окно "Построитель кодированных тестов ИП - формирование кода" с примечанием, что новый метод не требуется и что код будет сформирован только для изменений карты элементов управления ИП.

  7. Щелкните Создать.

  8. Закройте приложение SimpleWPFApp.exe.

  9. Закройте диалоговое окно "UIMap – Построитель кодированных тестов ИП".

    Обработка изменений в карте элементов управления ИП в окне "UIMap – Построитель кодированных тестов ИП" займет несколько секунд.

  10. В обозревателе решений откройте файл UIMap.Designer.cs.

  11. В файле UIMap.Designer.cs под конструктором в классе сформированного кода UIMainWindow разверните область Свойства. Обратите внимание, что свойство public WpfButton UIStartButton1 было добавлено.

  12. В свойстве UIStartButton1 разверните область критериев поиска. Обратите внимание, что SearchProperties имеет значение "buttonA":

    public WpfButton UIStartButton1
            {
                get
                {
                    if ((this.mUIStartButton1 == null))
                    {
                        this.mUIStartButton1 = new WpfButton(this);
                        #region Search Criteria
                        this.mUIStartButton1.SearchProperties[WpfButton.PropertyNames.AutomationId] = "buttonA";
                        this.mUIStartButton1.WindowTitles.Add("MainWindow");
                        #endregion
                    }
                    return this.mUIStartButton1;
                }
            }
    

    Теперь закодированный тест пользовательского интерфейса можно изменить, чтобы использовать только что сопоставленный элемент управления. Как указано в предыдущей процедуре, если требуется переопределить какие-либо методы или свойства в закодированном тесте пользовательского интерфейса, это нужно делать в файле UIMap.cs.

  13. В файле UIMap.cs добавьте конструктор и задайте свойство SearchProperties свойства UIStartButton, чтобы использовать свойство AutomationID со значением "buttonA":

    public UIMap()
            {
                this.UIMainWindowWindow.UIStartButton.SearchProperties[WpfButton.PropertyNames.AutomationId] = "buttonA";
            }
    
  14. В меню Построение выберите Построить решение.

  15. В представлении теста выберите CodedUITestMethod1 в столбце Имя теста. На панели инструментов щелкните Выполнить выделенный фрагмент.

    Теперь закодированный тест пользовательского интерфейса успешно пройдет все этапы тестирования. В окне результатов теста отобразится состояние Тест пройден.

См. также

Задачи

Практическое руководство. Создание закодированного теста пользовательского интерфейса

Основные понятия

Тестирование пользовательского интерфейса с помощью автоматических тестов пользовательского интерфейса

Поддерживаемые конфигурации и платформы для закодированных тестов пользовательского интерфейса и записей действий

Другие ресурсы

Приступая к работе с конструктором WPF