How To Use Selenium, Successfully

by admin on July 14, 2014

1. Preparation

• Define a Test Strategy
• Pick a Programming Language
• Choose a Text Editor

On Defining a Test Strategy

1. How does your business make money?
2. How do your users user your application?
3. What browsers are your users using?
4. What things have broken before?

Outcome: What to test and which browsers to care about

 

On Picking a Programming Language

• Same language as the app?
• Who will own it?
• Build a framework or use an existing one?
• http://bit.ly/seleniumframeworks
• What about a scripting language?

 

On Choosing a Text Editor

• Emacs
• IntelliJ
• Vim
• Sublime Text

2. Write Tests Well

• Atomic
• Autonomous
• Descriptive
• Succinct
• For a test runner
• Stored in Version Control

3. Selenium Fundamentals

• Mimics human action
• Uses a few common actions
• Works with “locators”

Locator Strategies

  • Class
  • CSS selectors
  • ID
  • Link Text
  • Partial Link Text
  • Tag Name
  • XPath

 

 

Good locators are:

• unique

• descriptive

• unlikely to change

That rules a few of these out: Link Text;  Partial Link Text; Tag Name

Good locators are:
• unique
• descriptive
• unlikely to change
That rules a few of these out Start with IDs and Classes

Use CSS or XPath sanely

CSS vs XPath
http://bit.ly/seleniumbenchmarks
http://bit.ly/cssxpathexamples

Finding Quality Locators

• Inspect the page
• Verify your selection
• e.g., FirePath or FireFinder
• http://bit.ly/verifyinglocators
• Learn through gaming
• http://bit.ly/locatorgame

 

Common Selenium actions

• click
• clear
• send_keys
• text
• displayed?
Look up your language’s bindings   http://bit.ly/seleniumwiki

A Login Example

1. Visit the main page of a site
2. Find the login button and click it
3. Find the login form’s username field and input text
4. Find the login form’s password field and input text
5. Find the submit button and click it

LoginPage

 

2

 

4. Write Re-usable/Maintainable Test Code

• Page Object Pattern
• Facade layer (a.k.a. Base Page Object)

3

4

5

6 6

7

5. Make Your Tests Resilient

Explicit waits
• Specify an amount of time, and an action
• Selenium will try until either:
• The action can be accomplished, or
• The amount of time has been reached (and throw a timeout exception)

8

6. Prepping for use (for humans and robots)

• Central setup/teardown
• Folder structure
• Config file(s)
• Tagging
• Reporting (screenshots, JUnit XML, etc.)
• Command-line execution wrapper

9

A simple file/folder structure

configs/
pages/
spec/
vendor/
Gemfile
Rakefile

Tagging

• Test packs
• Some tagging ideas
• wip
• critical
• component name
• slow
• story number

What this looks like in RSpec http://bit.ly/rspectagging

Reporting

• For robots: JUnit XML output
• http://bit.ly/rspec-junit
• For humans: screenshots, video, logs, etc.

7. Scale It

• Scaled execution (e.g., 3rd party cloud provider)
• Parallelization
• Continuous Integration

Cloud execution

http://saucelabs.com

10

11

Parallelization (can be done)

• In code
• with threads: http://bit.ly/seleniumparallel1
• with processes: http://bit.ly/seleniumparallel2
• Through a test runner (e.g., TestNG in Java)
• Through your CI server

#protip enforce random order execution of tests

Continuous Integration

• Feedback loops
• Code promotion

Feedback loops

• The goal: Find failures early and often
• Notification types
• Email, chat, SMS
• In-person (audio & visual)

12

Simple Jenkins configuration

1. Create a Job
2. Pull In Your Test Code
3. Set up Build Triggers
4. Configure Build steps
5. Configure Test Reports
6. Set up Notifications
7. Run Tests & View The Results

Write business valuable tests that are reusable, maintainable and resilient.!

Then package them for humans and robots — and scale them for you & your team.

#SQASolutionShare on FacebookShare on Google+Share on LinkedInTweet about this on TwitterEmail this to someone

Previous post:

Next post: