Automated Web Testing With Selenium
Automated Web Testing With Selenium
with
Selenium
Deepak Mittal
Dec 15, 2007
Agenda
• Introduction to Selenium
• Quick Demo
• Different ways of using Selenium
• Best practices with using Selenium
• Questions & Feedback
http://www.IntelliGrape.com
Quick Poll
• Do you do Web Testing?
• Do you do automated Web Testing?
• Do you need to support & test your web
app on multiple browsers?
• Which automated webtesting frameworks
do you use?
http://www.IntelliGrape.com
What is Selenium?
• A JavaScript based
• Open Source
• Web testing tool
• That supports testing Web 2.0 applications
• On multiple browsers
• And multiple Operating Systems
http://www.IntelliGrape.com
What is Selenium
• Acceptance Testing tool for webapps
• Tests run directly in browser
• Implemented entirely using browser
technologies
• JavaScript
• DHTML
• Frames
http://www.IntelliGrape.com
Origins of Selenium
• Developed by ThoughtWorks to test new
time and expenses system
• Selenium is the key mineral to protect body
from mercury toxicity
• http://www.openqa.org/selenium
http://www.IntelliGrape.com
Selenium Modes
• Test Runner Mode
• test cases in HTML tables
• RecordPlayback mode (Selenium IDE)
• Selenium Remote Control (RC) Mode
• testcases in your language of choice
http://www.IntelliGrape.com
Selenium Modes
• Test Runner Mode
• test cases in HTML tables
• RecordPlayback mode (Selenium IDE)
• Selenium Remote Control (RC) Mode
• testcases in your language of choice
http://www.IntelliGrape.com
Test Runner Mode
http://www.IntelliGrape.com
Selenium HTML Tests
• Selenium tests are HTML files
• Selenium interacts with the DOM served to
browser
• Selenium is agnostic of server side
technology
• Selenium HTML language is called
Selenese
http://www.IntelliGrape.com
Selenese
• Selenium declarative DSL : Selenese
• Selenium understands two types of HTML
files (which have simple HTML tables):
– Tests
– Test Suites
• Every test is contained within a test suite
• Point TestRunner.html at the test suite to
run it
http://www.IntelliGrape.com
Format of a Selenium Test
• HTML Table with 3 columns
– First Column: Selenium command
– Second Column: Target of command
– Third Column: Optional parameter
http://www.IntelliGrape.com
Selenium Concepts
• Element Locators : specify HTML elements
• Patterns : for pattern matching values
• Action : manipulate app state
• Accessors : store results in variables
• Assertion : verify that the app is in a certain
state
http://www.IntelliGrape.com
Test Runner Demo
• See Demo suite
• Look at tests bundled with Selenium
• Running selenium test in slow and fast
mode
http://www.IntelliGrape.com
Problems with HTML Tests
• Selenium is sensitive to the format of the
table
• No separation of concern
• Duplication is a major issue
• Tests need to be deployed with AUT
(Application under Test)
http://www.IntelliGrape.com
Selenium Modes
• Test Runner Mode
• test cases in HTML tables
• RecordPlayback mode (Selenium IDE)
• Selenium Remote Control (RC) Mode
• testcases in your language of choice
http://www.IntelliGrape.com
Selenium IDE
• Very useful tool for beginners
• Firefox extension which allows record/play
testing paradigm
• Automates commands, but asserts must be
entered by hand
• Creates the simplest possible Locator
• Based on Selenese
http://www.IntelliGrape.com
Selenium IDE Demo
• Look at firefox extension
• Look at various possible commands
• Record a test on AUT and playback
• Save the test at HTML file
• Export the test as Java / Ruby
http://www.IntelliGrape.com
Selenium Modes
• Test Runner Mode
• test cases in HTML tables
• RecordPlayback mode (Selenium IDE)
• Selenium Remote Control (RC) Mode
• testcases in your language of choice
http://www.IntelliGrape.com
Selenium RC Mode
http://www.IntelliGrape.com
Selenium RC Mode Demo
• Run selenium server
• Look at sample tests
http://www.IntelliGrape.com
Maintaining Selenium Tests
• Test code is just like production code
• Needs refactoring, abstraction
• API for the application
• Can build tests from API building blocks
• Try to maintain meaning – in test names,
variable names, comments, and suite
organization
http://www.IntelliGrape.com
Selenium with Continuous
Integration
• Run Selenium tests as part of the build
• Can generate HTML reports, published to
entire team
• Helps catch bugs ASAP
http://www.IntelliGrape.com
Ajax Support
• Selenium supports testing Web 2.0
applications
• Monitor the DOM for completion of Async
calls
• waitForCondition(script, timeout)
http://www.IntelliGrape.com
Useful Selenium Tools
• Chris Pederick's Web Developer toolbar
• XPather
• Firebug
• Xpath Checker
http://www.IntelliGrape.com
Selenium Best Practices
• Use Ids wherever possible (xpaths make
the tests brittle)
• Use datadriven tests. Use a JSP/PHP
page to generate tests
• In order to generate unique Ids, use
timestamp
• Use the right level of granularity
http://www.IntelliGrape.com
What have we not covered?
• Continuous Integration setups
• Creating screencasts using Selenium
• Testing of Ajax applications
• Selenium Commands in detail
• User Extensions
• Using Python/Ruby/C# ...
http://www.IntelliGrape.com
Selenium Limitations
• Slow when testing all the edge cases
• Slow for testing finegrained features – set
up and teardown are called for each test
http://www.IntelliGrape.com
Selenium Strengths
• For testing Ajax applications
• Multiple browsers
• Test fullstack
http://www.IntelliGrape.com
Interesting Possibilities
• Delivering Selenium Screencast as
Documentation to endusers
• Creating a report with screenshots
• A Server having VMWare images of various
OS/browser and each submitting a report
back
http://www.IntelliGrape.com
Summary
• Selenium is a testing framework for Web
Applications
• Drivers allow web testing in language of
choice
• Test scripts are code: need maintenance,
refactoring
http://www.IntelliGrape.com
Summary
• Can be used on Developer machines
• Most valuable when used with CI setup
• Can be used to make screen casts
• Tests run on real browser – most people
use it to test their JavaScript works
predictably on all browsers
http://www.IntelliGrape.com
Summary
• Can be used for unittesting, regression
testing, smoketesting, integration and
acceptance testing
http://www.IntelliGrape.com
References / Attribution
• Neal Ford's presentation on Selenium
• Selenium site
This work is licensed under the Creative Commons AttributionNoncommercialShare Alike 3.0 License
http://creativecommons.org/licenses/byncsa/3.0/
http://www.IntelliGrape.com
Feedback
<dmittal> AT <IntelliGrape.com>
http://www.IntelliGrape.com