The most important thing with an automated GUI testing tool is the ability to quickly and accurately identify the UI components you want to script up.
Squish, after evaluating quite a few alternatives, was the best at doing this (we have a C#/WPF application).
Another feature, which has been the best for us, is the fact that once UI components are mapped, all testing can be performed via scripting languages.
When I was working as a developer in test, I wrote an entire GUI testing framework in JavaScript which was possible because of Squish’s ability to map the UI components accurately.
Squish was also easily integrated into our CI system (TeamCity). It had native support for TeamCity and allowed a Squish build step to be created that can run all, or a selection of automated tests. So now, when we have a successful build, all our UI tests are ran on the products which gives product management and the team greater confidence.
My company began investigating automated GUI testing because it was something that we did not do at all and the manual testing overhead meant that we were spending more and more time regression testing our products prior to a release.
Now we are using Squish to automate our user stories as they are implemented, therefore removing the need for a regression phase at the end of a release. This frees up our QA team to perform more exploratory testing instead of repeating regression scripts.