Upgrade to Pro — share decks privately, control downloads, hide ads and more …

WebDriver that Won't Drive You Crazy

WebDriver that Won't Drive You Crazy

Workshop for StarEast and Romainian Testing Conference

Jim Holmes

April 30, 2018
Tweet

More Decks by Jim Holmes

Other Decks in Programming

Transcript

  1. WebDriver That
    Won’t Drive
    You Crazy

    View Slide

  2. Get Latest
    Slides At
    http://speakerdeck.com/
    jimholmes

    View Slide

  3. Jim Holmes
    [email protected]
    github.com/jimholmes
    @aJimHolmes

    View Slide

  4. Logistics

    View Slide

  5. Time
    Exercises
    Breaks
    Backlog

    View Slide

  6. Disclaimers

    View Slide

  7. I’m not an
    expert

    View Slide

  8. I’m
    “seasoned”

    View Slide

  9. My
    workshops
    are
    collaborative

    View Slide

  10. Stuff
    WILL
    Break

    View Slide

  11. Goals

    View Slide

  12. There Are No
    “Best
    Practices”

    View Slide

  13. Know the
    fundamentals

    View Slide

  14. Test the right
    things

    View Slide

  15. Get the right
    coverage

    View Slide

  16. Write good
    code

    View Slide

  17. You

    View Slide

  18. What are
    Two Things
    you hope to learn?

    View Slide

  19. Opening
    Exercises

    View Slide

  20. What does
    “Quality”
    mean to you?

    View Slide

  21. If Testing
    were a sport,
    what sport
    would it be?

    View Slide

  22. Thanks to Karen Greaves and
    Samantha Laing
    A Coach’s Guide to Agile
    Testing
    https://leanpub.com/AgileTesting

    View Slide

  23. What’s
    Our Job?

    View Slide

  24. Who
    guarantees
    “quality” ??

    View Slide

  25. Risk

    View Slide

  26. Value

    View Slide

  27. Risk and Value
    guide all our tests.
    ESPECIALLY
    WebDriver tests

    View Slide

  28. Types of
    Testing

    View Slide

  29. “test”
    versus
    “check”

    View Slide

  30. Any failure is
    a
    starting point

    View Slide

  31. Unit Tests

    View Slide

  32. 40 hours TIMES $20 per hour EQUALS $800

    View Slide

  33. Integration
    (or Service)
    Tests

    View Slide

  34. Using Postman
    When I call the create item web service
    with a new item service template
    Then the item shows up in the database

    View Slide

  35. User Interface
    (or end-to-end)

    View Slide

  36. (NOT
    “just” testing of
    JavaScript in
    browser)

    View Slide

  37. Using any of our supported browsers
    And I don’t have anything in my cart
    When I add bacon, tires, and a frog to my cart
    Then I will see those items in my cart

    View Slide

  38. Exploratory
    Testing

    View Slide

  39. Using SQL Injection, malformed data, and
    oversized data
    I’m going to explore the search product screens
    For 45 minutes
    To see what interesting (and scary!) stuff I can
    find

    View Slide

  40. https://martinfowler.com/articles/practical-test-pyramid.html

    View Slide

  41. https://twitter.com/noahsussman/status/836612175707930625

    View Slide

  42. Box of rocks

    View Slide

  43. There are no
    ‘best
    practices’
    There is no
    ‘one testing
    ring to rule
    them all’

    View Slide

  44. Security
    Accessibility
    Scalability
    Performance
    Usability
    Compliance
    Mom

    View Slide

  45. Demo
    What it looks
    like running
    together

    View Slide

  46. Working With
    Risk

    View Slide

  47. Setup

    View Slide

  48. Repository
    https://github.com/
    jimholmes/
    SaneWebDriver-CSharp
    SaneWebDriver-Java

    View Slide

  49. View Slide

  50. First run in
    Eclipse

    View Slide

  51. First run in
    Visual Studio

    View Slide

  52. Overview

    View Slide

  53. Components
    WebDriver APIs
    Drivers
    Frameworks
    Libraries
    Tools

    View Slide

  54. Browser

    View Slide

  55. Browser
    WebDriver

    View Slide

  56. Browser
    WebDriver

    View Slide

  57. IWebDriver browser = new FirefoxDriver();
    browser.Navigate().GoToUrl(“SOMEPLACE”);

    View Slide

  58. WebDriver
    Bindings Support
    Classes
    .NET
    Java
    Ruby
    Python
    JavaScript
    Perl
    blah blah blah blah
    WebDriverWait
    ExpectedConditions
    etc.
    +

    View Slide

  59. Host System
    Browser
    WebDriver
    Bindings +
    support classes

    View Slide

  60. Host System
    Browser
    WebDriver
    Bindings +
    support classes
    Driver
    ChromeDriver, eg

    View Slide

  61. Host System
    Browser
    WebDriver
    Bindings +
    support classes
    Driver
    ChromeDriver, eg

    View Slide

  62. Host System
    Browser
    WebDriver
    Bindings +
    support classes
    Driver
    ChromeDriver, eg

    View Slide

  63. Host System
    Browser
    WebDriver
    Bindings +
    support classes
    Driver
    ChromeDriver, eg

    View Slide

  64. Host System
    Browser
    WebDriver
    Bindings +
    support classes
    Driver
    ChromeDriver, eg

    View Slide

  65. Host System
    Browser
    WebDriver

    View Slide

  66. Host System
    Browser
    WebDriver
    Driver

    View Slide

  67. Host System
    Browser
    WebDriver
    Driver
    Remote
    WebDriver

    View Slide

  68. Host System
    Browser
    WebDriver
    Driver
    Remote
    WebDriver

    View Slide

  69. Host System
    Browser
    WebDriver
    Driver
    Remote
    WebDriver

    View Slide

  70. Host System
    Browser
    WebDriver
    Driver
    Remote
    WebDriver

    View Slide

  71. Host System
    Browser
    WebDriver
    Driver
    Remote
    WebDriver

    View Slide

  72. Host System
    Browser
    WebDriver
    Driver
    Remote
    WebDriver

    View Slide

  73. Host System
    Browser
    WebDriver
    Driver
    Remote
    WebDriver

    View Slide

  74. Host System
    WebDriver
    Selenium
    Server or
    Grid
    Host System
    Browser
    Driver
    Remote
    WebDriver

    View Slide

  75. Host System
    Browser
    Driver
    Remote
    WebDriver
    Test
    Framework
    WebDriver
    Selenium
    Server or
    Grid

    View Slide

  76. Assert.IsNotNullOrEmpty(
    grid.FindElement(
    By.CssSelector(SOME_ELEMENT)).Text);

    View Slide

  77. Test Framework
    Browser
    WebDriver
    Driver

    View Slide

  78. Language Framework
    Test Framework
    Browser
    WebDriver
    Driver

    View Slide

  79. GIVEN I am logged on as a Salesperson
    WHEN I create a new lead
    THEN that contact appears only in my leads

    View Slide

  80. Maintainability

    View Slide

  81. Your Test Suite
    should
    NOT BE

    View Slide

  82. “flaky”

    View Slide

  83. Require lots
    of time to
    change or fix

    View Slide

  84. Your Test Suite
    SHOULD
    BE

    View Slide

  85. Valuable

    View Slide

  86. Reliable

    View Slide

  87. Trustworthy

    View Slide

  88. Easy to
    Change

    View Slide

  89. How to
    get there

    View Slide

  90. Team With the
    Developers

    View Slide

  91. Small Steps

    View Slide

  92. Think Before
    You Code

    View Slide

  93. The best code
    you write is
    that which
    you don’t

    View Slide

  94. Refactor

    View Slide

  95. Code can be
    like poetry

    View Slide

  96. Think
    Plan
    Fail
    Learn
    Fail Less

    View Slide

  97. WebDriver
    101

    View Slide

  98. The
    Basics

    View Slide

  99. Test Layout:
    Arrange
    Act
    Assert

    View Slide

  100. Test
    One
    Thing

    View Slide

  101. Locators

    View Slide

  102. IDs
    CSS Selectors
    XPath

    View Slide

  103. Async

    View Slide

  104. What is
    Async?

    View Slide

  105. How do we
    avoid it
    driving us
    insane?

    View Slide

  106. Write the First
    Test

    View Slide

  107. Is the Grid
    there?

    View Slide

  108. Refactor

    View Slide

  109. Setup /
    Teardown

    View Slide

  110. Refactor
    Again

    View Slide

  111. Page Objects
    Know the page
    Not the test

    View Slide

  112. Clean Tests
    Know the test
    Not the page

    View Slide

  113. SRP
    Test/do one thing
    (and do it well)

    View Slide

  114. DRY/moist
    Don’t Repeat Yourself
    (except where it makes sense)

    View Slide

  115. More
    Advanced
    Concepts

    View Slide

  116. Understand
    Coverage

    View Slide

  117. What Tests Do
    We Need?

    View Slide

  118. Walkthrough:
    Unit and
    Integration

    View Slide

  119. Backing APIs

    View Slide

  120. Use Helper
    Libraries

    View Slide

  121. Team With the
    Developers

    View Slide

  122. Test Data
    Setup

    View Slide

  123. Testable
    Systems

    View Slide

  124. Own the System
    Code?
    USE THAT
    POWER!

    View Slide

  125. Hack the
    UI

    View Slide

  126. Locators
    Custom IDs

    View Slide

  127. Async
    flags

    View Slide

  128. Better Tests

    View Slide

  129. Hack the
    System

    View Slide

  130. Feature
    Toggles
    Mock Services

    View Slide

  131. Better Tests

    View Slide

  132. Now
    What?

    View Slide

  133. Factories
    Configuration
    Lifecycle Management

    View Slide

  134. https://thefriendlytester.co.uk/2014/02/webdriver-factory.html

    View Slide

  135. CI/CD

    View Slide

  136. Cloud

    View Slide

  137. Discussion:
    Parameterizing
    for
    Different Envs

    View Slide

  138. Parallel

    View Slide

  139. View Slide

  140. Parallelization Solves
    Everything!

    View Slide

  141. Parallelization Solves
    Everything!

    View Slide

  142. View Slide

  143. Parallelization Solves
    Everything!

    View Slide

  144. Fix Your Dang System!

    View Slide

  145. bit.ly/3HoursTo3Mins

    View Slide

  146. Discussion:
    Test Stability
    in
    Parallel Execution

    View Slide

  147. Takeaways

    View Slide

  148. View Slide

  149. Automate High-Value,
    High Risk

    View Slide

  150. Avoid Overlapping
    Coverage

    View Slide

  151. Test Code
    is
    Production Code

    View Slide

  152. Manage Your Data

    View Slide

  153. Build Out APIs

    View Slide

  154. Avoid End-To-End

    View Slide

  155. Parallelization as
    LAST RESORT

    View Slide

  156. bit.ly/leadershipjourney

    View Slide

  157. A Couple Closing
    Remarks

    View Slide

  158. 0) No SharePoint

    View Slide

  159. B) Hug your loved
    ones
    RIGHT NOW

    View Slide

  160. THANK
    YOU

    View Slide