Using Selenium-IDE with a rich Javascript application?

Posted by Darien on Stack Overflow See other posts from Stack Overflow or by Darien
Published on 2011-01-03T20:16:10Z Indexed on 2011/01/04 0:53 UTC
Read the original article Hit count: 187

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.

© Stack Overflow or respective owner

Related posts about JavaScript

Related posts about testing