A melhor prática para o teste de automação da interface do usuário é fazer o mínimo possível. As interfaces de usuário são alteradas com frequência, o que significa que você precisa constantemente atualizar sua automação. Geralmente, é preferível estruturar o código do produto de uma maneira que permita testes automatizados sem a UI Automation.
Dito isto, você nem sempre pode se livrar da automação da interface do usuário. Você mencionou o escritório, então eu presumo que você esteja codificando para Windows e usando .Net. Eu faço bastante no meu trabalho atual. Aqui estão algumas das coisas que aprendi.
1) Veja as bibliotecas UIAutomation que foram introduzidas no .Net 3.0. Eles fornecem uma biblioteca extensa e bastante simples de usar para automação. (http://msdn.microsoft.com/en-us/library/ms753107.aspx)
2) Faça o download do UISpy (http://msdn.microsoft.com/en-us/library/ms727247.aspx)
3) Torne as UIs do seu produto automatizáveis.
3a) Se for WPF, coloque os AutomationIDs em tudo.
3b) Tente criar nomes distintos de classe de controle e janela (nomes de classe de interface do usuário, não nome de classe de código-fonte). Se você não sabe o que quero dizer, carregue o UI Spy e comece a olhar para o Windows. Observe quantas janelas em aplicativos diferentes têm um nome de classe # 32770. Este é o nome da classe para uma caixa de diálogo do Windows. Qualquer janela que estenda a caixa de diálogo e não defina seu próprio nome, o padrão é esse. Isso causa todo tipo de sofrimento do ponto de vista da automação da interface do usuário.
4) Evite instruções Thread.Sleep (). Tente usar garçons (consulte a documentação do UIAutomation).
5) NUNCA misture o código de teste com o código de automação da interface do usuário. Crie bibliotecas separadas para executar a automação da interface do usuário. Chame essas bibliotecas de seus testes. Quando a interface do usuário é alterada, isso facilita muito a atualização da automação.
6) Sempre registre um ouvinte para um evento de interface do usuário antes de executar a ação que causaria o disparo do evento. Na prática, isso significa que você estará trabalhando com threads.
6a) Exemplo: não comece a aguardar um evento Janela aberta depois de clicar em um botão para abrir a janela. A janela pode abrir antes do garçom ser registrado e nunca receber o evento.
7) Nunca assuma que a janela que acabou de abrir é a que você deseja. Todos os tipos de janela podem abrir inesperadamente no Windows.
Eu poderia continuar mais, mas isso está ficando um pouco longo.