Комментарий к предыдущему посту про утилиты для CodedUITest заставил меня задуматься о том, как же увеличить скорость работы coded UI tests, потому что не секрет, что они работаю небыстро.
Первая операция, про которую я хочу рассказать, и которая выполняется иногда ну ооооочень долго, это ввод текста в текстовое поле. Хотя такая распространенная операция, ай-ай-ай. Скорость выполнения этой операции непостоянная, бывает, что она выполняется быстро, но также часто бывает, что она выполняется очень долго. Стандартными средствами текст в текстовое поле вводится так:
Или второй способ:
Но оба они работают не очень быстро, а иногда и очень долго.
Как можно ускорить эту операцию? По сути, операция ввода в текстовое поле состоит из следующих - кликнуть в текстовое поле, удалить старый текст (если он есть) и ввести в новый. Мы можем создать наследника класса WpfEdit и переопределить у него свойство Text нужным нам образом:
Теперь текст вводится следующим образом - происходит клик мышкой в текстовом поле, выделяется весь текст и с клавиатуры вводится новый текст вместо старого.
Теперь для работы с текстовым полем вместо класса WpfEdit мы используем класс WpfEditEx.
Выигрыш по времени, который дает такой подход, зависит от производительности компьютера, на котором выполняются тесты, но факт того, что ввод текста в текстовое поле выполняется быстрее - налицо.
Первая операция, про которую я хочу рассказать, и которая выполняется иногда ну ооооочень долго, это ввод текста в текстовое поле. Хотя такая распространенная операция, ай-ай-ай. Скорость выполнения этой операции непостоянная, бывает, что она выполняется быстро, но также часто бывает, что она выполняется очень долго. Стандартными средствами текст в текстовое поле вводится так:
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 = "Иван"
Выигрыш по времени, который дает такой подход, зависит от производительности компьютера, на котором выполняются тесты, но факт того, что ввод текста в текстовое поле выполняется быстрее - налицо.