Upload
dave-haeffner
View
2.572
Download
6
Embed Size (px)
DESCRIPTION
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.
Citation preview
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
1. Preparation
• Define a Test Strategy
• Pick a Programming Language
• Choose a Text Editor
On Defining a Test Strategy1. 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
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)
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)
Added to base page
Put to use in a page object
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
Central setup/teardown
A simple file/folder structureconfigs/
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 (e.g., 3rd party cloud provider)
• Parallelization
• Continuous Integration
cloud_config.rb
spec_helper.rb
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)
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: break the build
Simple Jenkins configuration1. 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!
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