To deepen my knowledge in whatever test automation toolset I am learning on-the-job, especially when starting a new position, I always have a few side projects going, dabbling in it during the weekends and off-hours, practicing what I am learning. It's how I hit the ground running when I start a new position.
More can be found on my GitHub site. To see general blog entries on building automated test frameworks, go to the Table of Contents.
Claude Sonnet Over-Engineered My Playwright Login!
March 2026
Does an automation framework for a Playwright Login page need to dive into Martin Fowler's concepts of Dependency Injection, Singleton, TestDouble patterns along with the standard Page Object patterns? Standards set by ISTQB and OWASP? Documentation from the Refactoring Guru, The Gang of Four? Claude Sonnet 4 thinks so!
Playwright Generate Plans: Playwright + TypeScript:
February 2026
Testing out how Playwright-Test-Planner and Playwright-Test-Generator, two plugins for GitHub Copilot, can create a test plan in Markdown, then write an automated test framework in Playwright + TypeScript against it, adding in page objects and reporting just by prompting.
Cursor Creates: Playwright + C-Sharp:
February 2026
It's a head-to-head matchup! Cursor AI versus VS Code + GitHub Copilot battling to create automated test frameworks using MS Playwright + C#. Who creates the best tests for The-Internet / Login? The best GitHub Actions Workflow? The best README docs? And can it be created only using prompts?
Login C Sharp:
February 2026
- Source Code: https://github.com/tjmaher/login-c-sharp
DetoxDemo: Testing a React Native mobile app with Detox + TypeScript
January 2026
Based on my work building from scratch a React Native mobile automation framework using Wix's Detox + TypeScript + GitHub Action workflows + Allure Reports at SELF ID. Tested against my first GitHub CoPilot "vibe coded" React Native application I've ever coded, based on Dave Haefner's The-Internet.
- Part One: DetoxDemo, a vibe-coded React Native app
- Part Two: First Time Vibe Coding? What Could Go Wrong?
- Part Three: Features of Detox Demo: CI/ CD, Logging and Reporting
- Part Four: Using GitHub Action Workflows to kick off tests in CI/ CD
- Part Five: The Facebook Ecosystem: React, React Native, Metro, and Yarn
- LinkedIn: First Time Using GitHub CoPilot to Create a ReactNative LoginPage app. What Could Go Wrong?
- Slideshare.Net: http://tinyurl.com/detox-demo-slides
- Source Code: https://github.com/tjmaher/detox-demo
November 2021
How I practiced using MassMutual's test Ruby + Watir + Cucumber automation toolsets.
- Part One: Source Book: Cucumbers and Cheese: A Tester's Workshop
- Part Two: Installing Ruby + Watir + Chromedriver + VS Code on Windows 10
- Part Three: Writing Ruby + Watir tests for The-Internet
- Part Four: Composing tests using Cucumber and Gherkin
Are you sure the buses are still listed?
Data-driven API tests with Ruby + NET::HTTP + ThoughtWorks Gauge
September 2019
Introduction to Capybara: A TestAutomationU course
May 2019
- Part One: Setting up the test plan and table data in a spec file
- Part Two: Interacting with the MBTA API using NET::HTTP
- Source Code: https://github.com/tjmaher/gauge-ruby-api
Introduction to Capybara: A TestAutomationU course
May 2019
Created a course on Capybara + Ruby for Test Automation University based on my work building a test automation framework from scratch at Threat Stack. Visual testing using Capybara + Ruby + Headless Chrome + Applitools.
Basic Capybara-Gauge
December 2018
- Part One: Setup and Installation of Ruby + Bundler, Capybara, and RSpec
- Part Two: Arrange, Act, Assert! Testing Links and Navigation, Setting Expectations, and Searching Within
- Part Three: Finders and Matchers
- Part Four: Testing a Login Page, refactoring it into a method
- Part Five: Dropdowns, Radio Buttons, and Checkboxes
- Part Six: Handling Alerts and Modals
- Part Seven: Advanced Topics such as Screenshots, Headless Chrome, Capybara's headless Apparition driver, and adding Applitools.
- Source Code: https://github.com/tjmaher/tau-capybara
Basic Capybara-Gauge
December 2018
Based on my work at Threat Stack building a test automation framework for their security application. Threat Stack required it be written in Ruby + Gauge + Gitlab, a toolset I was of yet unfamiliar with. Capybara + Ruby + Headless Chrome + Rubocop.
Discovering Docker
Spring & Summer 2018
- Part One: Analyzing The-Internet
- Part Two: Setup Ruby Environment
- Part Three: Setup Capybara to Test Opening Chrome
- Part Four: Add Option For Chrome Headless
- Part Five: Add Test Steps and Spec Implementations
- Part Six: Setup Chrome and ChromeDriver Logging
- Part Seven: Rubocop Code Review
- Source Code: https://github.com/tjmaher/capybara-gauge
Discovering Docker
Spring & Summer 2018
First exposure to Amazon AWS, I started studying it in order to build a virtual machine for a test automation framework I was building for Threat Stack.
Tinkering with Twitter
October 2017
- Starting a Selenium Grid using AWS + SeleniumHQ Docker images + Docker Compose
- Setting up Ubuntu Linux with Docker
- Basic Chef + Test Kitchen: Setting up Ubuntu with Vagrant + Virtual Box + the Test-Kitchen Ruby Gem on a MacBook
Tinkering with Twitter
October 2017
Didn't get the job at Twitter, but I did do well on the take-home coding test! Uses Twitter4J Java library. Thank you, Angie Jones for referring me!
- Part One: Twitter and the Twitter Search API
- Part Two: Getting the Twitter credentials: Consumer Keys and Access Tokens
- Part Three: Setting up an API Testing Environment with Twitter4J
- Part Four: Post a Tweet Using Twitter4J To Interact With the Twitter API
- GitHub: Review the source code for the project.
Build a Basic Appium Framework
May 2017 - June 2017
While working as a manual tester on a contact at Ahold, the parent company of Stop & Shop supermarkets, I designed a proof-of-concept that I demoed for them, trying to convince them to hire me as an automation developer creating a brand new mobile automation framework. They asked how I was thinking of constructing it, so I showed them these blog posts.
Learning Appium Desktop
April 2017
- Part One: Review How to Inspect Mobile Apps with Appium Desktop
- Part Two: Design a Basic Test, Examining Mobile Elements with Appium Desktop
- Part Three: Install and Launch an App Using Desired Capabilities
- Part Four: Set up the Page Objects, Page Factories and Tests
- Part Five: Download the tests and run them on your own MacBook!
- Part Six: How to create and launch an Android emulator from Android Studio
- Part Seven: What happens behind the scenes as Appium installs and launches an Android app? Examining and footnoting a log file.
- GitHub: Review the source code for the project.
Learning Appium Desktop
April 2017
While working as a manual tester on a contact at Ahold, the parent company of Stop & Shop supermarkets, I decided I wanted to create a proof-of-concept of a mobile automation framework. They wanted to see what toolsets I could use. These are my research notes.
Learning Serenity BDD
March 2017
- Part One: What is Appium Server and How Do You Start It With Appium Desktop
- Part Two: How to Connect To Your Android Device Using the Android SDK, the Android Command Line Tools, and the Android Debug Bridge
- Part Three: Setting up remote devices through WiFi
- Part Four: Setting up Android Emulators with Android Virtual Device Manager (avd), choosing the Android operating system version
- Part Five: Find the Desired Capabilities: appPackage and appActivity. Bug in AAPT if giving just appName
- Part Six: Inspecting an Android app using Appium Desktop
Learning Serenity BDD
March 2017
Starting a new QA Contract at Ahold, the parent company of Stop & Shop supermarkets, I was investigating how I wanted to write automated tests for their mobile apps.
Are You Sure the Bus Line is Listed? Gathering data using REST APIs and REST Assured:
February 2017
Building a Geb + Groovy + Spock project with Yeoman:
November 2016
- Serenity BDD: An Automation Framework That Uses Specification by Example (SBE)
- What is the Difference Between TDD and BDD?
- Studying BDD using The Cucumber Book and BDD in Action
- Scaffolding a new project using Maven Archetypes
- Reviewing The Serenity Screenplay Tutorial
Are You Sure the Bus Line is Listed? Gathering data using REST APIs and REST Assured:
February 2017
- Don't Gather Data from the MBTA's website. Use a RESTful Endpoint Instead!
- Interacting with MBTA's API using REST Assured
Building a Geb + Groovy + Spock project with Yeoman:
November 2016
New job at Good Start Genetics? New automation toolsets to learn, using Geb + Groovy + Spock.
SDET Prepwork:
Playing with Protractor:
September 2016
- About Yeoman, scaffolding, and other tooling applications
- A Step-by-Step Process: Installing and Configuring Yeoman using Chris Hluchan's Geb Generator
- Running the Built-In Tests From the Command Line, and Examining How They Are Set Up
- Initial Source Code Generated by the Geb Generator
SDET Prepwork:
I have shifted from being an automation engineer to being a Software Developer in Test. In order to keep up, I have written a few blogs entries about what I need to learn:
Playing with Protractor:
September 2016
A company gave me a take-home test for a job interview. Didn't get the job, but I did experiment for the first time writing a test framework with Protractor + JavaScript + Jasmine, the toolsets at their company.
RESTful API Testing with Postman and Newman:
July 2016
Fitbit Boston was investigating new ways to write API tests, using Postman, a toolset I was unfamiliar with at the time. Article covers "What is an API?" and gives sample APIs on the web. Also shows
- Testing an AngularJS application with Protractor, Jasmine, and JavaScript
- Walkthrough of installing PhoneCat Tutorial App: How to learn AngularJS
- The complexities of testing JavaScript frameworks, according to Vojtěch Jína, creator of the Karma Test Runner
RESTful API Testing with Postman and Newman:
July 2016
Fitbit Boston was investigating new ways to write API tests, using Postman, a toolset I was unfamiliar with at the time. Article covers "What is an API?" and gives sample APIs on the web. Also shows
- Walkthrough Setting up a Postman Test
- How to download and configure Newman, how Postman runs tests from the command line
Configuring Build.Gradle Environments:
June 2016
A fun Memorial Day project: Experiment with the new way Fitbit Boston was writing tests, using Gradle + JUnit + Hamcrest instead of Maven + TestNG + JUnit.
The Builder Pattern:
April 2016 - May 2016
- IntelliJ: Setting up WebDriver framework in Gradle
- Eclipse: Setting up WebDriver framework in Gradle
- A Bit About Groovy
The Builder Pattern:
April 2016 - May 2016
A Senior Developer at Fitbit walked me through a new way to store data, so of course I had to practice using it during my off-hours.
RESTful Testing with Stripe and Apache HttpComponents:
Feb 2016 - March 2016
RESTful Testing with Stripe and Apache HttpComponents:
Feb 2016 - March 2016
Selenium WebDriver + Java + Apache HTTP Components. This was an experimental proof-of-concept that I demoed to stakeholders to prove to Fitbit Boston that we could add tests to our infrastructure for the Stripe API payment processor. They asked for documentation on what I was planning, so I showed them these blog posts I had just written.
Automate Amazon
Dec 2015 - Jan 2016
How to develop a rudimentary framework to create automated tests for Amazon. Selenium WebDriver + Java + TestNG, based on work doing at Fitbit Boston.
Testing The-Internet
June - July 2015
Selenium WebDriver + Java demonstrating refactoring out common utilities such as logging and error handling, getting page titles, getting URLs, and sending keys, similar to what we were using at Fitbit Boston. Web locators stored in Page Objects.
- Introduction
- Part One: Intro to REST APIs
- Part Two: Interacting with Stripe using http and cURL
- Part Three: API Keys, Property files, and Initial Setup
- Part Four: UriBuilder, HttpGet and other Apache HttpComponents
- Part Five: From JSON to Object: HttpEntity and GSON
- Source Code: GitHub, T.J. Maher
Automate Amazon
Dec 2015 - Jan 2016
How to develop a rudimentary framework to create automated tests for Amazon. Selenium WebDriver + Java + TestNG, based on work doing at Fitbit Boston.
- Introduction
- Setup a Development Environment
- Sketch Out a Use Case
- Common Utility Methods
- Writing a Sign In Test
- Product Enums, Product Objects, and Pojos
- Initialize Cart and Login
- Writing the Shopping Cart Test
Testing The-Internet
June - July 2015
Selenium WebDriver + Java demonstrating refactoring out common utilities such as logging and error handling, getting page titles, getting URLs, and sending keys, similar to what we were using at Fitbit Boston. Web locators stored in Page Objects.
Writing automated tests versus Dave Haeffner's Login page on his test site, The-Internet.
- Step One: Sketch out the simple manipulation of a Login page
- Step Two: Draft Common Utilities
- Step Three: Storing Constants: static finals vs enums
- Step Four: Storing Locators for Web Elements
- Step Five: The Page Object Model
- Step Six: Writing the Automated Test