I was working at a financial services software company in the early days of User Interface automation frameworks.
We decided that automating the GUI was the way to go, and immersed in developing the framework and our own tests.
The goal of automating our tests was to speed us up, while still providing broad coverage once the system was in place. We would then be able to perform repetitive or slowly changing operations, like building a very complex document, to see if the application had memory leaks or unexpected crashes. We wanted to be able to repeat the tests and have each run be identical.
We learned a lot about what you should do and – most importantly – what you shouldn’t do when reusing tests.