2020 State of Test Automation Report


  1. Regardless of the past decade’s software advancements, test automation is still a huge pain and obstacle for DevOps.
  2. The average test automation coverage is less than 50%. To mature DevOps, organizations must strive toward 75-80% and beyond.
  3. Organizations lack continuous testing strategy that involves entire DevOps teams.
  4. Continuous testing and shifting left heavily depend on the proper matching of individuals’ skillsets. Unfortunately, this is not properly implemented.
  5. Test automation within the software build cycle and pipeline isn’t effective enough, doesn’t happen in time, and suffers from flakiness.

To download the full report, please click here.

Download android app Software Testing – Full Stack QE / SDET and get the early access.

Premium Software Testing / SDET Jobs – India (10/10)

Automation – Senior Quality Assurance Engineer (Noida, India) https://bit.ly/36QlwBA

SDET-I/II/III (Gurgaon, India) https://bit.ly/3lxMiT0

Test Specialist: SDET (Bengaluru, Karnataka, India) https://bit.ly/2SHjknG

QA Automation Testing (Bengaluru, Karnataka, India) https://bit.ly/3iRSVhC

QA Automation Engineer-Python (ESTAR) (Mumbai, Maharashtra, India) https://bit.ly/2STQqkl

SDET – Senior Software Development Engineer (Bengaluru, Karnataka, India) https://bit.ly/2IdIGHI

Senior Software Engineer In Test (New Delhi, Delhi, India) https://bit.ly/36NGn8l

QA Lead Automation (New Delhi, Delhi, India) https://bit.ly/3lHtSj9

Software Development Engineer in Test I (Noida, Uttar Pradesh, India) https://bit.ly/3jMabpE

Selenium - Python - Get all child elements

There are various ways to find child elements:
  • find_elements_by_name
  • find_elements_by_xpath
  • find_elements_by_link_text
  • find_elements_by_partial_link_text
  • find_elements_by_tag_name
  • find_elements_by_class_name
  • find_elements_by_css_selector

For instance, consider this page source:

  <form id="loginForm">
   <input name="username" type="text" />
   <input name="password" type="password" />
   <input name="continue" type="submit" value="Login" />

The form element can be located like this:

login_form = driver.find_element_by_id('loginForm')

More references here

Docker Cheat Sheet (pdf)

A quick reference cheat sheet on Docker commands for installation, containers, images and more.

REST Assured - How can I determine if a JSON response path exists or doesn't exist?

One of the most common problem: determine if a JSON response path exists or doesn't exist?

Imagine that we have a resource called "/json" that returns the following JSON response:

   "done": true,
   "records": [
           "Name": "Bob",
           "Phone": null,
           "CreatedDate": "2013-07-02T14:25:06Z",
           "Id": "0ca00000piscd1bj"
   "size": 1

To verify that the records list contains the attribute Phone (even though it's null) we can do like this:

get("/json").then().assertThat().body("records.any { it.containsKey('Phone') }", is(true));

Likewise we can check that records doesn't contain an attribute called x:

get("/json").then().assertThat().body("records.any { it.containsKey('x') }", is(false));

To verify that a JSON object contains an element, for example to check that "size" is defined in the example above you can do like this:

get("/json").then().assertThat().body("any { it.key == 'size' }", is(true));

Selenium 4.0 Alpha 6 Release- Added support for Chrome DevTools protocol!

SeleniumHQ has release 4.0 Alpha 6 on 2020-05-28. Awesome contributors have added the support for Chrome DevTools Protocol!

We would like to thank them for making our life easy.

Key changes include:
  • Full remoting of the CDP protocol across the Grid
  • The skeleton of our GraphQL support
  • Better configuration options, especially for Nodes, via TOML
  • A bajillion improvements & fixes

1. Added DevTools classes and methods generated from the CDP specification. It currently supports commands and events and provides Rubyish API:
      driver.devtools.page.navigate(url: 'http://google.com')
      driver.devtools.page.on(:load_event_fired) do |params|
        puts("Page loaded in #{params['timestamp']}")
Check https://chromedevtools.github.io/devtools-protocol/ for more information about possible commands and events. Please note that this API is considered to be experimental and may change any time before stable 4.0 release.

2. Fixed an issue when passing :prompt_for_download (or similar snake_cased
    symbols) in Options#prefs would be ignored by Chrome because Selenium
    would internally convert it to camelCased format (:promptForDownload).
    Now :prefs are left intact.

1. Fixed an issue when Driver#execute_cdp would not work for Chromium-based Edge browser.

1. Deprecated passing :desired_capabilities and :options to driver initialization in favor of :capabilities. They now can be combined in an array to make custom capabilities requirements:

      caps = Selenium::WebDriver::Remote::Capabilities.chrome
      opts = Selenium::WebDriver::Chrome::Options.new
      Selenium::WebDriver.for(:remote, capabilities: :chrome)
      Selenium::WebDriver.for(:remote, capabilities: caps)
      Selenium::WebDriver.for(:remote, capabilities: opts)
      Selenium::WebDriver.for(:remote, capabilities: [caps, opts])

2. Deprecated passing Hash to :capabilities in favor of Remote::Capabilities object.
3. Updated minimum require Ruby version to 2.5.
4. Improved keyword arguments handling to avoid warnings in Ruby 2.7.

Automating Tactically and Strategically with Alan Richardson

From Sausecon 2020: 
One of the biggest concepts that has made a difference to my programming and automating in recent years is the concept of “Tactical vs. Strategic.” Automating tactically might be for a specific purpose, possibly small, possibly a bit rough around the edges, not necessarily completely robust for everyone, etc. And strategic automation is more critical to long-term aims, maintained and maintainable, etc. In this talk, Alan Richardson provides examples of automating both Strategically and Tactically for activities as diverse as supporting testing, marketing and general life. We will also consider how and when to move from automating tactically to strategically, and how the concept has helped Alan change his programming style and how to write better code.

Job SDET - Automation Testing; Herndon, Virginia US

Company: The Oakleaf Group


  • Facilitate the design and development of automated test methodologies, collaborate with engineering and product teams to implement shift left techniques on test design and automation.
  • Write actionable, testable product requirements in the form of user stories based on input from product development team.
  • Support test engineering efforts to implement enterprise frameworks to enhance overall testing capabilities.
  • Write and execute System and User Acceptance strategies, plans and scripts for the migration of a relational data warehouse that is being retired.
  • Leverage coding expertise to develop and maintain test tools and frameworks to validate unit, integration and functional tests of the system.
  • Create appropriate test scenarios and data sets.
  • Work with lines of business, technology, and operations to determine priorities, and schedule of releases.
  • Document test procedures and issues.
  • Support testing AND automation of testing for a range of projects from defect fixes and enhancements to strategic initiatives.
  • Log bugs and enhancements into the defect tracking and planning tool.
  • Escalate key testing issues and provide feedback to the stakeholders.
  • Ensure that all requirements are covered in the testing, that it is completed within established time and that objectives conform to the user requirements and line of business.
  • Provide input and shape SIT & UAT processes in line with industry best practices.


  • Bachelor’s degree in computer science or related field.
  • 2+ years experience building, testing, and operating software on AWS.
  • 3+ years of testing engineering experience with test automation frameworks and performance engineering frameworks
  • 2+ years of Mainframe (COBOL) development and support experience
  • Experience with direct manual testing that includes crafting and translating test strategies into test plans and schedules; creating test scripts/cases/data; and executing test scripts.
  • Significant experience working with different automation frameworks such as BDD (Behavioral Driven Development), Data Driven, Test Driven Development (TDD) and Hybrid.
  • Experience with Test Automation technologies such as Cucumber, Gherkin, Selenium and Sauce Labs is a must.
  • Deep expertise in test methodology, process, planning, and execution.
  • Prefer experience with financial data/systems, particularly with mortgage and/or loan-level data.