пятница, 19 апреля 2013 г.

Расширения для Coded UI Test

     Данная статья будет полезна тем, кто разрабатывает C# тесты для автоматизации UI приложения. При разработке тестов часто бывает так, что средств, предоставляемых выбранным фреймворком для тестирования (в нашем случае UI) недостаточно для решения конкретной задачи, и приходится подпиливать его под свои нужды. Раньше я уже описывала несколько способов решения таких проблем касательно Coded UI. Хочу рассказать еще об одном, самом универсальном способе - создании методов расширения для работы с контролами.
     Рассмотрим самый простой пример.
     Я сталкивалась с такой ситуацией, когда UI приложения был сформирован таким образом, что реальный пользователь мог кликнуть мышкой по кнопке, но при использовании стандартного метода Mouse.Click(control) выходило исключение, говорящее о том, что это контрол заблокирован (хотя на самом деле он не был заблокирован). Эту проблему можно решить, создав метод расширения для класса Mouse фреймворка Coded UI, который позволит сделать клик на таком контроле:


    /// <summary>
    /// Класс расширений для работы с мышью.
    /// </summary>
    public static class MouseExtension
    {
        /// <summary>
        /// Осуществляет Click() левой кнопкой мыши, служит для заблокированых контролов.
        /// </summary>
        /// <param name="mouse">Мышь.</param>
        /// <param name="controlBoundingRect">BoundingRect контрола.</param>
        public static void ClickOnBlockingControl(this Mouse mouse, Rectangle controlBoundingRect)
        {
            Point clickablePoint = Point.Add(controlBoundingRect.Location,
                new Size(controlBoundingRect.Width / 2, controlBoundingRect.Height / 2));
            Mouse.Click(clickablePoint);
        }
    }

Тогда в коде какого-то метода, осуществляющего клик по контролу, этот метод расширения можно использовать следующим образом:

Mouse.Instance.ClickOnBlockingControl(UIMyButton.BoundingRectangle);
           
Аналогично можно делать методы расширения для любых контролов. По такому принципу построены библиотеки утилит для работы с CodedUI тестами, о которых я писала ранее.


Комментариев нет:

Отправить комментарий