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


Настройка закодированного теста пользовательского интерфейса таким образом, чтобы во время воспроизведения он дожидался определенных событий

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

Методы UITestControl.WaitForControlXXX()

Методы UITestControl.WaitForControlXXX()

Описание

WaitForControlReady()

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

WaitForControlEnabled()

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

WaitForControlExist()

Ожидание появления элемента управления. Например, после проверки приложением определенных параметров может предполагаться появление сообщения об ошибке. Время проверки является переменным. С помощью этого метода можно дождаться появления диалогового окна с сообщением об ошибке.

WaitForControlNotExist()

Ожидание исчезновения элемента управления. Например, можно дождаться исчезновения индикатора выполнения.

WaitForControlPropertyEqual(String, Object)

Ожидание того, что определенное свойство элемента управления примет заданное значение. Например, можно дождаться, пока текст состояния не изменится на Done.

WaitForControlPropertyNotEqual(String, Object)

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

WaitForControlCondition(Predicate<UITestControl>)

Ожидание того, что определенный предикат вернет значение true. Этот метод можно использовать в составной операции ожидания (например, при проверке условий ИЛИ) для заданного элемента управления. Например, можно дождаться, пока текст состояния не примет значение Succeeded или Failed, как показано в следующем фрагменте кода.

// Define the method to evaluate the condition 
private static bool IsStatusDone(UITestControl control) 
{ 
    WinText statusText = control as WinText; 
    return statusText.DisplayText == "Succeeded" || statusText.DisplayText == "Failed"; 
} 
// In test method, wait till the method evaluates to true 
statusText.WaitForControlCondition(IsStatusDone);

WaitForCondition<T>(T, Predicate<T>)

Все вышеописанные методы являются методами-экземплярами UITestControl. Это статический метод. Этот метод также ожидает, пока определенный предикат примет значение true, но его можно использовать и в составной операции ожидания (например, при проверке условий ИЛИ) для нескольких элементов управления. Например, можно дождаться, пока текст состояния не примет значение Succeeded или пока не появится сообщение об ошибке, как показано в следующем фрагменте кода.

// Define the method to evaluate the condition 
private static bool IsStatusDoneOrError(UITestControl[] controls) 
{ 
    WinText statusText = controls[0] as WinText; 
    WinWindow errorDialog = controls[1] as WinWindow; 
    return statusText.DisplayText == "Succeeded" || errorDialog.Exists; 
} 
// In test method, wait till the method evaluates to true 
UITestControl.WaitForCondition<UITestControl[]>(new UITestControl[] { statusText, errorDialog }, IsStatusDoneOrError); 

Все эти методы реализуют следующее поведение:.

  • они возвращают значение true в случае успеха ожидания и false в противном случае;

  • неявное время ожидания задается свойством WaitForReadyTimeout. По умолчанию это свойство имеет значение 60000 миллисекунд (одна минута);

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

Описанные выше функции являются мощными и гибкими инструментами, и их должно быть достаточно для решения почти любых задач. Если же этих методов оказывается недостаточно и в коде требуется использовать метод Wait(Int32) или Sleep(Int32), рекомендуется вместо API Thread.Sleep() использовать Playback.Wait(). Это объясняется следующими причинами:

  • с помощью свойства ThinkTimeMultiplier можно изменять длительность ожидания. По умолчанию эта переменная равна 1, но ее можно увеличивать или уменьшать, чтобы изменять время ожидания для всего кода. Например, если тестирование выполняется для медленной сети или другой ситуации с низкой производительностью, можно в одном месте (или даже в файле конфигурации) увеличить значение переменной до 1,5, и время ожидания будет везде увеличено на 50%;

  • внутри метода Playback.Wait() вызывается метод Thread.Sleep() (с учетом описанных выше расчетов) на небольшие периоды в цикле for; при этом проверяется запрос пользователем операции cancel\break. Иными словами, метод Playback.Wait() позволяет отменить воспроизведение до завершения ожидания, в то время как метод Sleep может вызвать исключение.

Примечание

Редактор закодированных тестов пользовательского интерфейса позволяет удобным образом изменять закодированные тесты пользовательского интерфейса.С его помощью можно находить, просматривать и изменять методы теста.Кроме того, можно изменять действия пользовательского интерфейса и соответствующие элементы управления на карте элементов управления пользовательского интерфейса.Редактор закодированных тестов пользовательского интерфейса входит в состав пакета дополнительных компонентов 2 для Microsoft Visual Studio 2010.Для загрузки этого пакета дополнительных компонентов требуется Visual Studio 2010 Ultimate, Visual Studio 2010 Premium или Test Professional 2010 с подпиской MSDN, Microsoft BizSpark или MSDN Academic Alliance.Дополнительные сведения см. в разделе Изменение закодированных тестов пользовательского интерфейса с помощью редактора закодированных тестов пользовательского интерфейса и Пакет дополнительных компонентов 2 для Microsoft Visual Studio 2010.

См. также

Задачи

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

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

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

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

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

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

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