88
How To Use Selenium, Successfully by Dave Haeffner, @TourDeDave

How To Use Selenium Successfully (Java Edition)

Embed Size (px)

Citation preview

Page 1: How To Use Selenium Successfully (Java Edition)

How To Use Selenium, Successfully

by Dave Haeffner, @TourDeDave

Page 2: How To Use Selenium Successfully (Java Edition)

http://www.wpclipart.com/geography/features/chasm.png.html

Page 3: How To Use Selenium Successfully (Java Edition)

http://en.wikipedia.org/wiki/Optimal_solutions_for_Rubik's_Cube

Page 4: How To Use Selenium Successfully (Java Edition)

Write business valuable tests that are reusable, maintainable and resilient across all relevant browsers.

Then package and scale them for you & your team.

Page 5: How To Use Selenium Successfully (Java Edition)

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?

Page 6: How To Use Selenium Successfully (Java Edition)

Step 1 Define a Test Strategy

Page 7: How To Use Selenium Successfully (Java Edition)

Test Strategy1. 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 to test and which browsers to care about

Page 8: How To Use Selenium Successfully (Java Edition)

Step 2 Pick a Programming

Language

Page 9: How To Use Selenium Successfully (Java Edition)

Programming Language

• Same language as the app?

• Who will own it?

• Build a framework or use an existing one?

• http://bit.ly/seleniumframeworks

Page 10: How To Use Selenium Successfully (Java Edition)

• Vim, Emacs, Sublime Text

• IntelliJ, Eclipse

Choose an Editor

Page 11: How To Use Selenium Successfully (Java Edition)

Step 3 Use Selenium fundamentals

Page 12: How To Use Selenium Successfully (Java Edition)

Selenium Fundamentals

• Mimics human action

• Uses a few common actions

• Works with “locators”

Locators tell Selenium which HTML element to interact with

Page 13: How To Use Selenium Successfully (Java Edition)

Common Actions

• get();

• findElement();

• click(); //or submit();

• sendKeys();

• isDisplayed();

Page 14: How To Use Selenium Successfully (Java Edition)

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

Page 15: How To Use Selenium Successfully (Java Edition)

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

Page 16: How To Use Selenium Successfully (Java Edition)

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

Page 17: How To Use Selenium Successfully (Java Edition)

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 (with care)

Page 18: How To Use Selenium Successfully (Java Edition)

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

Page 19: How To Use Selenium Successfully (Java Edition)

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

• Conversation

Page 20: How To Use Selenium Successfully (Java Edition)
Page 21: How To Use Selenium Successfully (Java Edition)

Step 4 Write your first test

Page 22: How To Use Selenium Successfully (Java Edition)

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

Page 23: How To Use Selenium Successfully (Java Edition)

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

Page 24: How To Use Selenium Successfully (Java Edition)

http://the-internet.herokuapp.com/login

Page 25: How To Use Selenium Successfully (Java Edition)
Page 26: How To Use Selenium Successfully (Java Edition)
Page 27: How To Use Selenium Successfully (Java Edition)

Now to find an assertion

1. Login

2. Inspect the page

3. Find a locator

4. Verify it

5. Add it to the test

Page 28: How To Use Selenium Successfully (Java Edition)
Page 29: How To Use Selenium Successfully (Java Edition)
Page 30: How To Use Selenium Successfully (Java Edition)

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://bit.ly/se-exceptions-java

Page 31: How To Use Selenium Successfully (Java Edition)

Exception Handling cont’d

http://bit.ly/se-exceptions-howto

Page 32: How To Use Selenium Successfully (Java Edition)

Step 5 Write reusable and

maintainable test code

Page 33: How To Use Selenium Successfully (Java Edition)

Page Objects

Page 34: How To Use Selenium Successfully (Java Edition)

Application Under Test

Test 1 Test 2 Test 3 Test 4 Test 5Test 1 Test 2 Test 3 Test 4 Test 5

Need to update EVERY test :-(

Page 35: How To Use Selenium Successfully (Java Edition)

Application Under TestPage Object(s)

Test 1 Test 2 Test 3 Test 4 Test 5Test 1 Test 2 Test 3 Test 4 Test 5

Need to update JUST the page object :-D

Page 36: How To Use Selenium Successfully (Java Edition)

Let’s look at a page object for login

Page 37: How To Use Selenium Successfully (Java Edition)
Page 38: How To Use Selenium Successfully (Java Edition)

And here’s what the test looks like when using it

Page 39: How To Use Selenium Successfully (Java Edition)

Page object helpers: http://bit.ly/po-html-elements http://bit.ly/po-page-factory

Page 40: How To Use Selenium Successfully (Java Edition)

Base Page Object

Page 41: How To Use Selenium Successfully (Java Edition)

Selenium Commands

Page Object 1

Page Object 2

Page Object 3

Page Object 4

Page Object 5

Page 42: How To Use Selenium Successfully (Java Edition)

Base Page Object

Page Object 1

Page Object 2

Page Object 3

Page Object 4

Page Object 5

Selenium Commands

• Global reuse • More readable • Insulates you from

Selenium API changes http://bit.ly/se-upgrade

Page 43: How To Use Selenium Successfully (Java Edition)

Let’s take a look at a Base Page Object

Page 44: How To Use Selenium Successfully (Java Edition)
Page 45: How To Use Selenium Successfully (Java Edition)

And here it is implemented

Page 46: How To Use Selenium Successfully (Java Edition)
Page 47: How To Use Selenium Successfully (Java Edition)

How everything fits together

Test TestTest

Page Object

Page Object

Base Page

Object

Tests use page objects

Page objects use the base page object

The base page object uses Selenium commands

Page 48: How To Use Selenium Successfully (Java Edition)

Step 6 Make your tests resilient

Page 49: How To Use Selenium Successfully (Java Edition)

Waiting

Page 50: How To Use Selenium Successfully (Java Edition)

Explicit Waits

• Specify an amount of time, and an action

• Selenium will try repeatedly until either:

• The action is completed, or

• The amount of time specified has been reached (and throw a timeout exception)

Page 51: How To Use Selenium Successfully (Java Edition)
Page 52: How To Use Selenium Successfully (Java Edition)

In the Base page object

Page 53: How To Use Selenium Successfully (Java Edition)

In the DynamicLoading page object

Page 54: How To Use Selenium Successfully (Java Edition)

Browser Timing Considerations

Page 55: How To Use Selenium Successfully (Java Edition)

Step 7 Prep for use

Page 56: How To Use Selenium Successfully (Java Edition)

Test Harness• Simple organizational structure

• Central setup and teardown

• Configurable at run-time (with sensible defaults)

• Reporting & Logging

• Parallelization

• Test Grouping

Page 57: How To Use Selenium Successfully (Java Edition)

Folder structure

Page 58: How To Use Selenium Successfully (Java Edition)

Central setup/teardownMore on JUnit Rules: http://bit.ly/junit-rules

Page 59: How To Use Selenium Successfully (Java Edition)

Simple config with defaults

Page 60: How To Use Selenium Successfully (Java Edition)

Reporting & Logging

• Machine readablee.g., JUnit XML

• Human readable e.g., screenshots, failure message, stack trace

Fantastic Test Report Tool http://bit.ly/se-reporter (Allure Framework)

Page 61: How To Use Selenium Successfully (Java Edition)

Parallelization• In code

• Through your test runner

• Through your Continuous Integration (CI) server

#protip Enforce random order execution of tests http://bit.ly/junit-random-order

Recommended approach: http://bit.ly/mvn-surefire

Page 62: How To Use Selenium Successfully (Java Edition)

Test Grouping• Metadata (a.k.a. Categories)

• Enables “test packs”

• Some category ideas

• wip

• shallow

• deep

• story number

More info: bit.ly/junit-categories

Page 63: How To Use Selenium Successfully (Java Edition)

Step 8 Add in cross-browser

execution

Page 64: How To Use Selenium Successfully (Java Edition)

Locallyhttp://bit.ly/se-chromedriver http://bit.ly/se-firefoxdriver http://bit.ly/se-iedriver http://bit.ly/se-operadriver (12.16) http://bit.ly/se-safaridriver

Page 65: How To Use Selenium Successfully (Java Edition)

Chrome

Page 66: How To Use Selenium Successfully (Java Edition)

Grid

Grid Hub

Browser

Tests

All done with the Selenium Standalone Server Just requires additional runtime flags

Grid Node

Grid Node

Grid Node

Browser

Browser

Page 67: How To Use Selenium Successfully (Java Edition)

GridHub

Node(s)

Page 68: How To Use Selenium Successfully (Java Edition)

Grid

More on Selenium Grid http://bit.ly/se-grid-docs http://bit.ly/se-grid-post http://bit.ly/se-grid-extras http://bit.ly/se-grid-scaler

Page 69: How To Use Selenium Successfully (Java Edition)

Sauce Labs

Sauce Labs BrowserTests

Page 70: How To Use Selenium Successfully (Java Edition)

Sauce Labs

Additional Considerations - Test name - Pass/Fail status - Secure tunnel

More on Sauce: http://bit.ly/sauce-platforms http://bit.ly/sauce-post http://bit.ly/sauce-tutorial-java

Page 71: How To Use Selenium Successfully (Java Edition)
Page 72: How To Use Selenium Successfully (Java Edition)

Step 9 Build an automated

feedback loop

Page 73: How To Use Selenium Successfully (Java Edition)

Feedback loops• The goal: Find failures early and often

• Done with continuous integration and notifications

• Notifications e.g., remote: Email, chat, SMSin-person: audio/visual, public shaming

Page 74: How To Use Selenium Successfully (Java Edition)

Code Committed

Unit/Integ. (pass?)

Deploy to autom. test

server (success?)

Run automated

tests (pass?)

Deploy to next env.

yes

yes

yes

Notify team if no

Code Promotion

Bonus points: stop the line

Page 75: How To Use Selenium Successfully (Java Edition)

Simple CI 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

8. High-five your neighbor

Page 76: How To Use Selenium Successfully (Java Edition)
Page 77: How To Use Selenium Successfully (Java Edition)

Step 10 Find information on

your own

http://bit.ly/se-info-slides

http://bit.ly/se-info-video

Page 78: How To Use Selenium Successfully (Java Edition)

Elemental Selenium (3)

Selenium HQ (1) Documentation & Tips

Issue Tracker Guidance (23) Straight To The Source (24) IRC Chat Channel (25)

Selenium Testing Tools Cookbook (18) The Selenium Guidebook (19)

Selenium Design Patterns (21)

All in-person Selenium Meetups (13) How to start your own (14)

Selenium Developer Google Group (10) Agile Testing Yahoo Group (11)

Selenium Wiki (2)

Books

Meetups

Mailing Lists

Forums

The good stuff

http://bit.ly/se-info-#

Videos

Selenium LinkedIn Users Group (6) Stack Overflow (7) Quora (8)

Selenium Users Google Group (9)

The Selenium Hangout (12)

Conference talks (15) Meetup talks (16)

Selenium 2 Testing Tools (17)

Selenium Simplified (20)

Issue Tracker (22)

BlogsThe official Selenium blog (4) “All” Selenium blogs (5)

Page 79: How To Use Selenium Successfully (Java Edition)

Issue Tracker Guidance (23) Straight To The Source (24) IRC Chat Channel (25)

Selenium Testing Tools Cookbook (18) The Selenium Guidebook (19)

Selenium Design Patterns (21)

All in-person Selenium Meetups (13) How to start your own (14)

Selenium Developer Google Group (10) Agile Testing Yahoo Group (11)

Selenium Wiki (2) Elemental Selenium (3)

Documentation & Tips Selenium HQ (1)

Books

Meetups

Mailing Lists

Forums

The good stuff

http://bit.ly/se-info-#

Videos

Selenium LinkedIn Users Group (6) Stack Overflow (7) Quora (8)

Selenium Users Google Group (9)

The Selenium Hangout (12)

Conference talks (15) Meetup talks (16)

Selenium 2 Testing Tools (17)

Selenium Simplified (20)

Issue Tracker (22)

BlogsThe official Selenium blog (4) “All” Selenium blogs (5)

Beginner

Page 80: How To Use Selenium Successfully (Java Edition)

Straight To The Source (24) IRC Chat Channel (25)

Issue Tracker Guidance (23)

Selenium Testing Tools Cookbook (18) The Selenium Guidebook (19)

Selenium Design Patterns (21)

All in-person Selenium Meetups (13) How to start your own (14)

Selenium Developer Google Group (10) Agile Testing Yahoo Group (11)

Selenium Wiki (2) Elemental Selenium (3)

Documentation & Tips Selenium HQ (1)

Books

Meetups

Mailing Lists

Forums

The good stuff

http://bit.ly/se-info-#

Videos

Selenium LinkedIn Users Group (6) Stack Overflow (7) Quora (8)

Selenium Users Google Group (9)

The Selenium Hangout (12)

Conference talks (15) Meetup talks (16)

Selenium 2 Testing Tools (17)

Selenium Simplified (20)

Issue Tracker (22)

BlogsThe official Selenium blog (4) “All” Selenium blogs (5)

Beginner

Page 81: How To Use Selenium Successfully (Java Edition)

Issue Tracker Guidance (23) Straight To The Source (24) IRC Chat Channel (25)

Selenium Testing Tools Cookbook (18) The Selenium Guidebook (19)

Selenium Design Patterns (21)

All in-person Selenium Meetups (13) How to start your own (14)

Selenium Developer Google Group (10) Agile Testing Yahoo Group (11)

Selenium Wiki (2) Elemental Selenium (3)

Documentation & Tips Selenium HQ (1)

Books

Meetups

Mailing Lists

Forums

The good stuff

http://bit.ly/se-info-#

Videos

Selenium LinkedIn Users Group (6) Stack Overflow (7) Quora (8)

Selenium Users Google Group (9)

The Selenium Hangout (12)

Conference talks (15) Meetup talks (16)

Selenium 2 Testing Tools (17)

Selenium Simplified (20)

Issue Tracker (22)

BlogsThe official Selenium blog (4) “All” Selenium blogs (5)

Intermediate - Advanced

Page 82: How To Use Selenium Successfully (Java Edition)

Straight To The Source (24)IRC Chat Channel (25)

Documentation & Tips

Issue Tracker Guidance (23)

Selenium Testing Tools Cookbook (18)The Selenium Guidebook (19)

Selenium Design Patterns (21)

All in-person Selenium Meetups (13) How to start your own (14)

Selenium Developer Google Group (10) Agile Testing Yahoo Group (11)

Selenium Wiki (2) Elemental Selenium (3)

Selenium HQ (1)

Books

Meetups

Mailing Lists

Forums

The good stuff

http://bit.ly/se-info-#

Videos

Selenium LinkedIn Users Group (6) Stack Overflow (7)Quora (8)

Selenium Users Google Group (9)

The Selenium Hangout (12)

Conference talks (15) Meetup talks (16)

Selenium 2 Testing Tools (17)

Selenium Simplified (20)

Issue Tracker (22)

BlogsThe official Selenium blog (4) “All” Selenium blogs (5)

Intermediate - Advanced

Page 83: How To Use Selenium Successfully (Java Edition)

#selenium

Page 84: How To Use Selenium Successfully (Java Edition)

Steps to solve the puzzle1. Define a Test Strategy

2. Pick a programming language

3. Use Selenium Fundamentals

4. Write Your First Test

5. Write re-usable and maintainable test code

6. Make your tests resilient

7. Package your tests into a framework

8. Add in cross-browser execution

9. Build an automated feedback loop

10. Find information on your own

Page 85: How To Use Selenium Successfully (Java Edition)

Write business valuable tests that are reusable, maintainable and resilient across all relevant browsers.

Then package them and scale them for you & your team.

Page 86: How To Use Selenium Successfully (Java Edition)

–Dave Haeffner

“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”

Page 87: How To Use Selenium Successfully (Java Edition)

http://ElementalSelenium.com

Page 88: How To Use Selenium Successfully (Java Edition)

Get in touch

@TourDeDave

[email protected]

DaveHaeffner.com