I use Selenium (through CodeCeption) and it works well when I can target some IDs or CSS rules.
But we have Canvas & Flash games which expose nothing for testing. The only interface is the GUI !
These games have "events" to which my test has to respond correctly to resume the main "game" (Yep, the DEV didn't thought of test-ability!)
For these, I use Sikuli. It uses Python for scripts and it is possible to disable the display of image AND get him ask a name for each taken screenshot.
For handling "events" I use simple "try catch" constructs so my test can run through a game happily.
The longest part is reverse engineering since, of course, games aren't documented.
I have the same speed scripting in CodeCeption than Sikuli, if it takes more time in Sikuli, this is only due because I can't force these developers to provide interfaces for testing etc.
For the website, I ask IDs and classes on key elements (form elements, any interractable, outputs, ... )
If I fire Sikuli, someone did something wrong :-D
If you didn't pay attention to circumstances above :
- Flash / HTML5 canvas
- Moving HTML fragments that can't be identified easily (structural pattern, ID attribute, CSS selector, ...)
A side feature is the automatic generation of the HTML file describing the procedure. Project managers understand them ! (Ther is a lot of images...)