How To Use Selenium, Successfully by Dave Haeffner, @TourDeDave
Write business valuable tests that are reusable, maintainable and resilient across all relevant browsers . Then package and scale them for you & your team .
Selenium Overview •
What it is — the Reader’s Digest version
•
What it is and is not good at
•
IDE vs. Local vs. Remote
•
Slow, brittle, and hard to maintain?
Step 1 Define a Test Strategy
Test Strategy 1. How does your business make money? 2. What features of your application are being used? 3. What browsers are your users using? 4. What things have broken in the app before?
Outcome: - What features to test - Which browsers to care about
Step 2 Pick a Programming Language
Programming Language •
Same language as the app?
•
Who will own it?
•
Build a framework or use an existing one? • http://se.tips/seleniumframeworks
Step 3 Use Selenium fundamentals
Selenium Fundamentals •
Mimics human action
•
Uses a few common actions
•
Works with “locators”
Locators tell Selenium which HTML element to interact with
Common Actions •
get();
•
findElement();
•
click(); //or submit();
•
sendKeys();
•
isDisplayed();
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
Good locators are: • unique • descriptive • unlikely to change
•
CSS selectors
•
ID
•
Link Text
•
Partial Link Text
That rules a few of these out
•
Tag Name
Start with IDs and Classes
•
XPath
Locator Strategies •
Class
Good locators are: • unique • descriptive • unlikely to change
•
CSS selectors
•
ID
•
Link Text
•
Partial Link Text
That rules a few of these out
•
Tag Name
Start with IDs and Classes
•
XPath
Use CSS or XPath (with care)
Locator Strategies • •
Class CSS selectors
•
ID
•
Link Text
•
Partial Link Text
•
Tag Name
•
XPath
CSS vs XPath http://se.tips/seleniumbenchmarks http://se.tips/cssxpathexamples
Finding Quality Locators •
Inspect the page
•
Verify your selection •
e.g., FirePath or FireFinder
• http://se.tips/verifyinglocators
• •
Learn through gaming •
•
e.g., JavaScript console with $$(‘’); or $(‘’);
http://se.tips/locatorgame
Conversation
Step 4 Write your first test
Good Test Anatomy •
Write for BDD or xUnit test framework
•
Test one thing (atomic)
•
Each test can be run independently (autonomous)
•
Anyone can understand what it is doing
•
Group similar tests together
A Login Example 1. Visit the login form 2. Find the login form’s username field and input text 3. Find the login form’s password field and input text 4. Find the submit button and click it 1. or, find the form and submit it
http://the-internet.herokuapp.com/login
Now to find an assertion 1. Login 2. Inspect the page 3. Find a locator 4. Verify it 5. Add it to the test
A much better assertion
Automated Visual Testing Primer •
Check that an application’s UI appears correctly
•
Can also be used to verify content
•
Hundreds of assertions for a few lines of code
•
Open-source libraries, baseline image comparison, and inherent challenges
http://se.tips/visual-testing-getting-started
In pom.xml
Exception Handling •
org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"css selector","selector":".flash.error"}
•
Most common ones you’ll run into: NoSuchElement and StaleElementReferenceError
•
A list of all WebDriver exceptions: http://se.tips/se-exceptions-java
The amount of time specified has been reached (and throw a timeout exception)
In the Base page object
In the DynamicLoading page object
Browser Timing Considerations
Step 7 Prep for use
Test Harness •
Simple organizational structure
•
Central setup and teardown
•
Configurable at run-time (with sensible defaults)
•
Reporting & Logging
•
Parallelization
•
Test Grouping
Folder structure
Central setup/teardown
More on JUnit Rules: http://bit.ly/junit-rules
Simple config with defaults
Import config where it’s needed (e.g., base test, etc.)
Reporting & Logging •
Machine readable e.g., JUnit XML
•
Human readable e.g., screenshots, failure message, stack trace
Fantastic Test Report Tool http://bit.ly/se-reporter (Allure Framework)
Parallelization •
In code
•
Through your test runner
•
Through your Continuous Integration (CI) server Recommended approach: http://bit.ly/mvn-surefire #protip Enforce random order execution of tests (turnkey in mvn-surefire)
Simple CI 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 8. High-five your neighbor
Step 10 Find information on your own http://se.tips/selenium-resources
Steps to solve the puzzle 1.
Define a Test Strategy
6.
Make your tests resilient
2.
Pick a programming language
7.
Package your tests into a framework
3.
Use Selenium Fundamentals
8.
Add in cross-browser execution
4.
Write Your First Test
9.
Build an automated feedback loop
5.
Write re-usable and maintainable test code
10. Find information on your own
Write business valuable tests that are reusable, maintainable and resilient across all relevant browsers . Then package them and scale them for you & your team.
“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”