WEB TESTING WITH SELENIUM AND JUNIT David Ross Drake - SDET 06/21/11 What is Selenium? Selenium – Portable software testing framework for web applications • Selenium IDE • Selenium Client Drivers • Selenium RC • Selenium Grid 2 06/21/11 Why use Selenium? Why automated testing? • Speed • Repeatability • Reliability • Cost • Requalification (security patches) • Verisimilitude (vs HTMLUnit) 3 06/21/11 DEMONSTRATION: SELENIUM IDE Recording and playing back a test with Selenium IDE 4 06/21/11 Selenium Locators • id – fastest method • name • link • dom • css • xpath – slowest method 5 06/21/11 DEMONSTRATION: EXPORTING TESTS Exporting tests from Selenium IDE into JUnit and running using Selenium RC 6 06/21/11 7 Selenium RC Image: www.seleniumhq.org 06/21/11 Selenium Challenges • Web app latency can cause tests to fail waiting on page events • Tests tend to lock in web pages, slowing iterative development • Selenium core is JavaScript based • Not all browsers interpret the same way • Can't perform cross-domain testing • Testing secure connections is tricky, and often browser specific • Execution is slow (compared to most unit tests) • Formatting problems are untested 8 06/21/11 Handling Event Latency Example: An event is triggered on the page when a user enters invalid data. public static void waitForPageValidation(DefaultSelenium selenium, String id) throws InterruptedException { for (int second = 0;; second++) { if (second >= 5) { fail("timeout waiting for event); } try { if (selenium.isVisible(id)) { break; } } catch (Exception e) {} Thread.sleep(1000); } } 9 06/21/11 Managing Change Separate page content used in tests from actual test logic. Most frequently used content: • Page titles • Field locators (ids, names) 10 06/21/11 11 Selenium 2 Advantages Disadvantages No Selenium RC installation No final version released (summer 2011) Cross-domain testing capabilities Limited backwards compatibility Object-oriented API Smaller number of supported browsers Mobile browser testing 06/21/11 Speeding Up Selenium • Avoid xpath; have id attributes for all tested fields • Reuse browser sessions (although this can cause subsequent tests to fail if the session fails) • Test local builds to reduce network latency • Avoid using multi-page test flows for atomic tests • Use parameterized tests to test multiple browsers at once • Parallelize tests to run multiple test classes at once • Use cloud-based testing services 12 06/21/11 13 Testing Tools in Sauce Labs • Sauce Scout – Manual testing using dozens of os/browser/version combinations • Sauce OnDemand – Automated cloud-based testing using a drop in replacement for selenium RC • Sauce Connect – Tunneling utility for connecting to an application under test behind a firewall • Sauce Builder – Selenium IDE modified to run tests using Sauce OnDemand 06/21/11 14 Cloud-based testing in Sauce Labs Image: www.saucelabs.com 06/21/11 DEMONSTRATION: SAUCE LABS Running tests using Sauce Labs and viewing the results 15 06/21/11 16 Additional Resources http://www.seleniumhq.com - selenium docs and downloads http://www.saucelabs.com - cloud-based selenium testing. http://cargo.codehaus.org - thin wrapper for java containers http://ce-games.blogger.com - links to this presentation