четверг, 24 января 2013 г.

CodedUITest. Увеличение скорости работы с текстовым полем.

Комментарий к предыдущему посту про утилиты для CodedUITest заставил меня задуматься о том, как же увеличить скорость работы coded UI tests, потому что не секрет, что они работаю небыстро.
Первая операция, про которую я хочу рассказать, и которая выполняется иногда ну ооооочень долго, это ввод текста в текстовое поле. Хотя такая распространенная операция, ай-ай-ай. Скорость выполнения этой операции непостоянная, бывает, что она выполняется быстро, но также часто бывает, что она выполняется очень долго. Стандартными средствами текст в текстовое поле вводится так:

WpfEdit UINameTextBox;
UINameTextBox.Text = "Иван"

Или второй способ:

Keyboard.SendKeys(UINameTextBox, "Иван");

Но оба они работают не очень быстро, а иногда и очень долго.
Как можно ускорить эту операцию? По сути, операция ввода в текстовое поле состоит из следующих - кликнуть в текстовое поле, удалить старый текст (если он есть) и ввести в новый. Мы можем создать наследника класса WpfEdit и переопределить у него свойство Text нужным нам образом:

    /// <summary>
    /// Класс для работы с контролом текстового поля.
    /// </summary>
    public class WpfEditEx : WpfEdit
    {
        /// <summary>
        /// Создает и инициализирует класс текстового поля.
        /// </summary>
        /// <param name="parentControl">Родительский контрол.</param>
        public WpfEditEx(WpfControl parentControl)
            : base(parentControl)
        {
        }
 
        /// <summary>
        /// Создает и инициализирует класс текстового поля.
        /// </summary>
        public WpfEditEx()
        {
        }
 
        /// <summary>
        /// Возвращает/устанавливает текст текстового поля.
        /// </summary>
        public override string Text
        {
            get
            {
                return base.Text;
            }
            set
            {
                Mouse.Click(this);
                Keyboard.SendKeys("A"ModifierKeys.Control);
                string text = (value.Length == 0) ? "{DELETE}" : value;
                Keyboard.SendKeys(text);
            }
        }
    }

Теперь текст вводится следующим образом - происходит клик мышкой в текстовом поле, выделяется весь текст и с клавиатуры вводится новый текст вместо старого.
Теперь  для работы с текстовым полем вместо класса WpfEdit мы используем класс WpfEditEx.

WpfEditEx UINameTextBox;
UINameTextBox.Text = "Иван"

Выигрыш по времени, который дает такой подход, зависит от производительности компьютера, на котором выполняются тесты, но факт того, что ввод текста в текстовое поле выполняется быстрее - налицо.

понедельник, 21 января 2013 г.

Набор полезных утилит для CodedUITest

При автоматизации UI приложений можно использовать полезный набор утилит для CodedUITest, который упрощает работу с контролами.
Например, такая операция, как поиск контрола, стандартными средствами записывается так:

WpfButton button = new WpfButton(ParentControl);
button.SearchProperties[WpfButton.PropertyNames.AutomationId] = "buttonId";

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

WpfButton button = UITestControlFactoryUtility.FromAutomationId<WpfButton>(ParentControl, "buttonId"));

В следующих сообщениях своего блога я планирую более подробно рассказать об опыте работы с CodedUITest для автоматизации тестирования UI и остальными продуктами Microsoft, облегчающими процесс тестирования.

пятница, 11 января 2013 г.

Юмор. Реакции разработчиков


Веселенький сайт про реакции разработчиков http://devopsreactions.tumblr.com/. Многое будет знакомо и интересно как автоматизаторам, так и ручным тестировщикам. Что мне особенно понравилось:

Code review недокументированного кода



Code review - тот, чей код на review



Code review - тот, кто проводит review



Отдел разработки, когда заказчик зашел в офис:



В офисе, когда code freeze



В офисе, когда выпущен успешный релиз



Как я представляю себя на следующем собеседовании на работу: