How To Use Selenium Successfully
Upcoming SlideShare
Loading in...5
×
 

How To Use Selenium Successfully

on

  • 2,124 views

Want to learn how to use Selenium from the ground up? This presentation will show you how to start from nothing and build out a well factored, maintainable, resilient, and parallelized set of tests ...

Want to learn how to use Selenium from the ground up? This presentation will show you how to start from nothing and build out a well factored, maintainable, resilient, and parallelized set of tests that will run locally, on a Continuous Integration server, and in the cloud. These tests will not only work well, but exercise relevant functionality that matters to the business.

Statistics

Views

Total Views
2,124
Views on SlideShare
1,935
Embed Views
189

Actions

Likes
10
Downloads
130
Comments
0

9 Embeds 189

http://natsgeo.com 60
http://sauceio.com 49
http://feedly.com 19
http://taguild.mfsbe.com 17
https://twitter.com 16
http://www.natsgeo.com 15
http://www.slideee.com 8
http://www.feedspot.com 4
http://beta.inoreader.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    How To Use Selenium Successfully How To Use Selenium Successfully Presentation Transcript

    • How To Use Selenium, Successfully by Dave Haeffner, @TourDeDave
    • http://www.wpclipart.com/geography/features/chasm.png.html
    • http://en.wikipedia.org/wiki/Optimal_solutions_for_Rubik's_Cube
    • Write business valuable tests that are reusable, maintainable and resilient. ! Then package them for humans and robots — and scale them for you & your team.
    • 1. Prepare Yourself • Define a Test Strategy • Pick a Programming Language • Choose a Text Editor
    • Define 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
    • Pick 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?
    • Choose a Text Editor • Emacs • IntelliJ • Vim • Sublime Text
    • 2. Write Tests Well • Atomic • Autonomous • Descriptive • Small batches • For a test runner • Stored in Version Control
    • 3. Leverage Selenium Fundamentals • Mimics human action • Uses a few common actions • Works with “locators” Locators tell Selenium which HTML element a command refers to
    • 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
    • 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
    • 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 Start with IDs and Classes
    • 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 Start with IDs and Classes Use CSS or XPath sanely
    • Locator Strategies • Class! • CSS selectors! • ID! • Link Text • Partial Link Text • Tag Name • XPath 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
    • http://the-internet.herokuapp.com/login
    • 4. Write Re-usable/ Maintainable Test Code • Page Object Pattern • Facade layer (a.k.a. Base Page Object)
    • Web Page Test 1 Test 2 Test 3 Test 4 Test 5 X X X X X
    • Page Object Test 1 Test 2 Test 3 Test 4 Test 5 Web Page X X X X X X
    • Selenium Commands Page Object 1 Page Object 2 Page Object 3 Page Object 4 Page Object 5
    • Base Page Object Page Object 1 Page Object 2 Page Object 3 Page Object 4 Page Object 5 Selenium Commands • Insulates you from Selenium API changes http://bit.ly/se-upgrade • More readable • Global reuse
    • 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)
    • Selenium::WebDriver::Wait.new(timeout: 10).until do! is_displayed? FINISH_TEXT! end Added to base page
    • 6. Prep for use • Central setup/teardown • Folder structure • Config file(s) • Tagging • Reporting (screenshots, JUnit XML, etc.) • Command-line execution wrapper
    • Central setup/teardown
    • 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.
    • Human Readable
    • Robot Ready
    • 7. Scale It • Scaled execution • 3rd party cloud provider, your own grid, etc. • Parallelization • Continuous Integration
    • Cloud execution http://saucelabs.com
    • cloud_config.rb
    • spec_helper.rb
    • Parallelization • 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 • Notifications • Email, chat, SMS • In-person (audio & visual)
    • Code Committed Integration (pass?) Deploy to autom. test server (success?) Run automated tests (pass?) Deploy to manual test server (manual) (success?) yes yes yes Notify team if no Code Promotion Bonus points: stop the line
    • 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 Don’t forget about a systems check!
    • Steps to solve the puzzle 1. Prepare yourself 2. Write tests well 3. Leverage Selenium fundamentals 4. Write re-usable & maintainable test code 5. Make your tests resilient 6. Prep everything for use 7. Scale it for you and your team
    • Write business valuable tests that are reusable, maintainable and resilient. ! Then package them for humans and robots — and scale them for you & your team.
    • –Dave Haeffner, @TourDeDave “You may think your puzzle is unique. But really, everyone is trying to solve the same puzzle. Yours is just configured differently — and it’s solvable”
    • http://SeleniumGuidebook.com
    • d http://ElementalSelenium.com