Лучшая практика для UI Automation Testing - делать как можно меньше. Пользовательский интерфейс часто меняется, что означает, что вам постоянно приходится обновлять свою автоматизацию. Обычно желательно структурировать код продукта таким образом, чтобы можно было автоматизировать тестирование без автоматизации пользовательского интерфейса.
Тем не менее, вы не всегда можете избавиться от автоматизации пользовательского интерфейса. Вы упомянули офис, поэтому я предполагаю, что вы пишете для Windows и используете .Net. Я делаю совсем немного в моей нынешней работе. Вот некоторые из вещей, которые я узнал.
1) Посмотрите на библиотеки UIAutomation, которые были представлены в .Net 3.0. Они предоставляют обширную и довольно простую в использовании библиотеку для автоматизации. (Http://msdn.microsoft.com/en-us/library/ms753107.aspx)
2) Загрузите UISpy (http://msdn.microsoft.com/en-us/library/ms727247.aspx)
3) Сделайте интерфейсы вашего продукта автоматизируемыми.
3a) Если это WPF, поместите AutomationID на все.
3b) Попытайтесь создать отличительные имена элементов управления и окон (имена классов пользовательского интерфейса, а не имя класса исходного кода). Если вы не знаете, что я имею в виду, загрузите UI Spy и начните смотреть на окна. Обратите внимание, сколько окон в разных приложениях имеют имя класса # 32770. Это имя класса для диалогового окна Windows. Любое окно, которое расширяет диалог и не устанавливает свое собственное имя, по умолчанию это. Это вызывает все виды горя с точки зрения автоматизации пользовательского интерфейса.
4) Избегайте выражений Thread.Sleep (). Попробуйте использовать официанты (см. Документацию UIAutomation).
5) НИКОГДА не смешивайте тестовый код с кодом автоматизации пользовательского интерфейса. Создайте отдельные библиотеки для автоматизации пользовательского интерфейса. Назовите эти библиотеки из ваших тестов. При изменении пользовательского интерфейса это значительно упростит обновление автоматизации.
6) Всегда регистрируйте слушателя для события пользовательского интерфейса перед выполнением действия, которое вызовет событие. На практике это означает, что вы будете работать с потоками.
6a) Пример: не начинайте ждать события открытия окна после нажатия кнопки, чтобы открыть окно. Окно может открыться до регистрации официанта и никогда не получить событие.
7) Никогда не думайте, что открывшееся окно - это то, что вам нужно. Все виды окна могут неожиданно открыться в Windows.
Я мог бы продолжать дальше, но это становится немного длиннее.