WEB TESTING WITH SELENIUM AND JUNITDavid Ross Drake - SDET
What is Selenium?
Selenium – Portable software testing framework for web
applications
• Selenium IDE • Selenium Client Drivers• Selenium RC• Selenium Grid
06/21/11 2
Why use Selenium?
Why automated testing?• Speed• Repeatability• Reliability• Cost• Requalification (security patches)• Verisimilitude (vs HTMLUnit)
06/21/11 3
DEMONSTRATION: SELENIUM IDERecording and playing back a test with Selenium IDE
06/21/11 4
Selenium Locators
• id – fastest method• name• link• dom• css• xpath – slowest method
06/21/11 5
DEMONSTRATION: EXPORTING TESTS
06/21/11 6
Exporting tests from Selenium IDE into JUnit and running using Selenium RC
Selenium RC
06/21/11 7
Image: www.seleniumhq.org
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
06/21/11 8
Handling Event LatencyExample: 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); } }
06/21/11 9
Managing Change
Separate page content used in tests from actual test logic. Most frequently used content:
• Page titles• Field locators (ids, names)
06/21/11 10
Selenium 2
06/21/11 11
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
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
06/21/11 12
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 13
Cloud-based testing in Sauce Labs
06/21/11 14
Image: www.saucelabs.com
DEMONSTRATION: SAUCE LABSRunning tests using Sauce Labs and viewing the results
06/21/11 15
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
06/21/11 16