Problem
At my workplace, we re trying to find the best way to create automated-tests for an almost wholly javascript-driven intranet application. Right now we re stuck trying to find a good tradeoff between:
- Application code in reusable and nest-able GUI components.
- Tests which are easily created by the testing team
- Tests which can be recorded once and then automated
- Tests which do not break after small cosmetic changes to the site
XPath expressions (or other possible expressions, like jQuery selectors) naively generated from Selenium-IDE are often non-repeatable and very fragile. Conversely, having the JS code generate special unique ID values for every important DOM-element on the page... well, that is its own headache, complicated by re-usable GUI components and IDs needing to be consistent when the test is re-run.
What successes have other people had with this kind of thing? How do you do automated application-level testing of a rich JS interface?
Limitations
- We are using JavascriptMVC 2.0, hopefully 3.0 soon so that we can upgrade to jQuery 1.4.x.
- The test-making folks are mostly trained to use Selenium IDE to directly record things.
- The test leads would prefer a page-unique HTML ID on each clickable element on the page...
- Training the testers to write or alter special expressions (such as telling them which HTML class-names are important branching points) is a no-go.
- We try to make re-usable javascript components, but this means very few GUI components can treat themselves (or what they contain) as unique.
- Some of our components already use HTML ID values in their operation. I d like to avoid doing this anyway, but it complicates the idea of ID-based testing.
- It may be possible to add custom facilities (like a locator-builder or new locator method) to the Selenium-IDE installation testers use.
- Almost everything that goes on occurs within a single "page load" from a conventional browser perspective, even when items are saved
Current thoughts
I m considering a system where a custom locator-builder (javascript code) for Selenium-IDE will talk with our application code as the tester is recording. In this way, our application becomes partially responsible for generating a mostly-flexible expression (XPath or jQuery) for any given DOM element. While this can avoid requiring more training for testers, I worry it may be over-thinking things.