Selenium Resources - Data-Driven Testing with IDE & XML

Many people doing Selenium testing, both new and experienced people, don’t realize that data-driven testing can be done with the IDE. Let’s see how to do this with a simple example — a test that checks for correct targets of the links in the Sauce Labs footer. Here are the steps to follow:

  1. Download the flowcontrol extension for IDE. (“Download” is a bit of a misnomer here, as the download link takes one to an HTML page. Simply copy/paste only the JavaScript contents of that page into a file named goto_sel_ide.js.)
  2. Download the 1.1 version of the includeCommand4IDE extension. (The just-released 1.2 version appears to have a serious bug.)
  3. Download the most recent version (0.2) of the datadriven.js extension.
  4. Install these 3 extensions in IDE via the Selenium Core extensionsfield (accessible via Options=>Options=>General). They must be specified in the order above!!!
  5. Re-start IDE so that all 3 extensions will get read in.
  6. Create an .xml file

    <testdata>
    <test linkText="How It Works" title="Sauce OnDemand: Cross browser testing with hosted Selenium testing in the cloud - Sauce Labs"/>
    <test linkText="Downloads" title="Sauce Labs Downloads"/>
    <test linkText="Pricing" title="Sauce Labs Pricing For Hosted Selenium in the Cloud"/>
    <test linkText="Support" title="Support: Sauce RC (Selenium RC) - Sauce Labs"/>
    <test linkText="Forums" title="Sauce Labs Forums"/>
    <test linkText="Blog" title="Selenium Testing? Do Cross Browser Testing with Sauce Labs"/>
    <test linkText="Flash/Flex Solution" title="Automate testing of your Flex and Flash Web Apps - Sauce Labs"/>
    <test linkText="Documentation" title="Documentation - Sauce Labs"/>
    <test linkText="About" title="About - Sauce Labs"/>
    <test linkText="Team" title="The Sauce Labs Team"/>
    <test linkText="News" title="Selenium News &amp; Events - Sauce Labs"/>
    <test linkText="Webinars" title="Webinars - Sauce Labs"/>
    <test linkText="Contact us" title="Support Contact - Sauce Labs"/>
    <test linkText="Service Status" title="Status - Sauce Labs"/>
    </testdata>
    
  7. linkText and title are variable names of my choosing. You can use any names you want, and also any number of variables you want. The critical thing is that each container must contain all the data–input and output–for a single test case.

  8. View your .xml file in the browser to ensure that it does not contain any errors (only necessary if you did not use an XML editor to create the file).
  9. Utilize your .xml file via creating an HTML test case:

    loadTestData file:///Users/mamp/Desktop/BLOG/saucelabs-footer.xml open http://www.saucelabs.com while !testdata.EOF() nextTestData

    clickAndWait link=${linkText} verifyTitle ${title} goBackAndWait endWhile

Be sure to replace the URL for the .xml file provided to loadTestData above with the appropriate URL on your computer.

Run the test. If all goes well, it should look like this:

Notice that I haven’t said how I gathered the data for the .xml file above. What if you had to develop a similar data-driven test case, only for a site involving hundreds of links such as De Anza College’s A-Z Directory? In my next Selenium Resources for Newbs post, I’ll show how IDE can be used to generate the .xml needed for such a test case.

Mary Ann May-Pumphrey is a software QA engineer at StumbleUpon. She has taught Selenium courses at both De Anza College in Cupertino and Santa Clara Adult Education’s High Tech Academy.

Sauce Labs - Selenium Testing on the Cloud

Sauce Labs’ cloud-based testing platform allows developers to automatically or interactively test mobile and web applications on more than 300 browsers and platforms including iOS, Android & Mac OS X. With built-in video recording of every test, debugging tools, and secure tunneling for local or firewalled testing, Sauce makes running, debugging and scaling test suites easier than ever. Sauce supports automated functional testing with Selenium and Javascript unit testing in all the popular programming languages, frameworks and CI systems.