For Firefox support, there is SlimerJS, a PhantomJS alternative that is coming along very nicely for testing your websites on the Gecko rendering engine. It even supports WebGL. Try it as an alternative CasperJS engine:
- If there are no Python bindings, could one invoke native bindings from with Python?
- Is it normal to add a base class for utility rather than use a field level instance?
We tried phantomjs for a while but it was very unstable (regularly crashed and since it's open source, bug reports often go ignored, even with stack traces), undocumented behavior, and fairly unusual ecosystem. I believe phantom made a fundamental mistake of not being nodejs based in the first place. Phantom has some really nice features though, like being able to read the console output. Selenium is kind of a joke in terms of features, but at least it's stable. I would choose selenium unless you get a specific benefit out of phantomjs.
Selenium is awesome. I'm using it in Java and PHP. I had a run in with it in its 1.x days and it was too unreliable to maintain the tests. Now it's fantastic.
Easiest acceptance testing framework I've used is Splinter. It's an abstraction layer over Selenium that practically makes writing tests similar to plain English: http://splinter.cobrateam.info/
Admittedly, I only took a cursory look at Splinter, but in my opinion Robot Framework[1][2] is much closer to plain English. This can be good if you know what you're doing and can come up with consistent naming and test/keyword organization conventions, or bad if used by someone without basic understanding of a concept of a function, white space delimiters, etc.
Still, it is super flexible, and I enjoyed using is a lot. Nice feature is having executable requirements if BDD is used. I.e. you can implement keywords to execute given-when-then req's and they became your test.
Lots of good options in the space of 'friendly' wrappers around Selenium.
For .NET users, FluentAutomation (http://fluent.stirno.com/) is a good option. Works in regular tests or with scriptcs .csx files. Can automate any of the Se supported browsers, including PhantomJS very easily with short, readable commands.
Absolutely love splinter! That being said, I implemented frame buffer support for both Firefox and chrome driver (for Linux clients) and saw phantomjs as unnecessary as a result.
PhantomJS is awesome for speed, but I noticed that it sometimes doesn't render iframe elements, ajaxed elements properly while using just Firefox does render all elements correctly.
Are you sure you just weren't waiting long enough for them to load? Phantom's onLoadFinished only takes into account the main frame, not any iFrame or AJAX resources. For that you need some sort of DOM based waitFor().
http://casperjs.org/