Home / Blog / How to Transition from Manual Tester to Automation Engineer
How to Transition from Manual Tester to Automation Engineer
You have been doing manual testing for a year or two. You understand the application, you write good test cases, and you find real bugs. But automation engineers earn more, work on more interesting problems, and have better long-term career prospects.
So how do you make the switch?
This is not a vague motivational guide. It is the exact path, with honest assessments of what is hard, what takes time, and what you can skip.
The Honest Reality First
Most guides skip this part. Here is what you actually need to know:
It takes 6–18 months to make a credible transition, depending on how much time you can invest per day.
You will write bad code first. Everyone does. The goal is not perfect code — it is working automation that a team can maintain. That standard is achievable within a year.
Your manual testing background is an advantage, not a liability. Automation engineers who never did manual testing often build tests that pass when the feature is broken, because they do not understand how the feature is actually supposed to work. You do.
You do not need a CS degree. You need to write Python or Java at a working level, understand one automation framework, and be able to debug test failures. That is learnable by anyone who is genuinely motivated.
Step 1: Choose a Language (and Commit)
The two practical choices are Python and Java.
Python
- Simpler syntax, faster to learn
- Used with Pytest, Playwright, Selenium, Robot Framework
- Growing rapidly in QA automation
- Best choice if you have zero programming background
Java
- More verbose but widely used in enterprise
- Used with Selenium + TestNG, REST Assured, Cucumber
- Required at many large corporations (banks, telecoms, large IT services)
- Best choice if your company or target companies use Java
Pick one and do not switch for at least 6 months. The mistake beginners make is trying both simultaneously, becoming average at both.
What to learn first (Python example)
# Week 1-2: Variables, data types, conditionals
name = "QA Engineer"
experience_years = 2
is_automation = False
if experience_years >= 2:
print(f"{name} is ready to learn automation")
# Week 3-4: Lists, dictionaries, loops
test_cases = ["login", "checkout", "search", "profile_update"]
for tc in test_cases:
print(f"Running: {tc}")
# Week 5-6: Functions
def get_user_data(user_id: int) -> dict:
return {"id": user_id, "name": "Test User", "email": "test@example.com"}
# Week 7-8: Classes
class LoginPage:
def __init__(self, driver):
self.driver = driver
def enter_email(self, email: str):
self.driver.find_element("id", "email").send_keys(email)Milestone: Solve 20 easy LeetCode problems in your chosen language. This proves you can think programmatically, not just copy-paste.
Step 2: Master API Testing First
Before writing a single line of UI automation, become proficient at API testing. Here is why:
- No browser setup complexity — you make HTTP requests, you get responses
- Faster feedback — API tests run in seconds, not minutes
- Higher value in interviews — SDET interviewers care more about API automation than Selenium
- Directly validates backend logic — which is where most real bugs live
Python: Requests Library
import requests
BASE_URL = "https://jsonplaceholder.typicode.com"
def test_get_user():
response = requests.get(f"{BASE_URL}/users/1")
assert response.status_code == 200
data = response.json()
assert data["id"] == 1
assert "name" in data
assert "email" in data
print(f"User: {data['name']}, Email: {data['email']}")
test_get_user()Structure it with Pytest
# tests/test_users_api.py
import pytest
import requests
BASE_URL = "https://jsonplaceholder.typicode.com"
class TestUsersAPI:
def test_get_user_returns_200(self):
response = requests.get(f"{BASE_URL}/users/1")
assert response.status_code == 200
def test_get_user_has_required_fields(self):
response = requests.get(f"{BASE_URL}/users/1")
data = response.json()
required_fields = ["id", "name", "email", "phone"]
for field in required_fields:
assert field in data, f"Missing field: {field}"
def test_get_nonexistent_user_returns_404(self):
response = requests.get(f"{BASE_URL}/users/9999")
assert response.status_code == 404
def test_create_user(self):
payload = {"name": "Test User", "email": "test@example.com"}
response = requests.post(f"{BASE_URL}/users", json=payload)
assert response.status_code == 201
data = response.json()
assert data["name"] == payload["name"]Milestone: A working Pytest project with 10+ API tests for a public API, committed to GitHub.
Step 3: Learn Playwright or Selenium for UI Automation
Once API automation is solid, add UI automation. The two main tools:
Playwright (recommended for new learners)
- Modern, fast, built-in waiting
- Python and JavaScript support
- Auto-waiting reduces flaky tests dramatically
Selenium
- Industry standard, 15+ years old
- Java and Python support
- Enormous community and job listings mention it explicitly
Page Object Model — The Pattern You Must Know
The Page Object Model (POM) is a design pattern that separates test logic from UI interaction code. Every senior SDET interviewer asks about it.
# pages/login_page.py
from playwright.sync_api import Page
class LoginPage:
def __init__(self, page: Page):
self.page = page
self.email_field = page.get_by_label("Email")
self.password_field = page.get_by_label("Password")
self.submit_button = page.get_by_role("button", name="Sign In")
self.error_message = page.locator(".error-banner")
def navigate(self):
self.page.goto("/login")
def login(self, email: str, password: str):
self.email_field.fill(email)
self.password_field.fill(password)
self.submit_button.click()
def get_error_text(self) -> str:
return self.error_message.inner_text()# tests/test_login.py
import pytest
from playwright.sync_api import Page
from pages.login_page import LoginPage
class TestLogin:
def test_valid_login_redirects_to_dashboard(self, page: Page):
login_page = LoginPage(page)
login_page.navigate()
login_page.login("admin@example.com", "password123")
assert "/dashboard" in page.url
def test_invalid_password_shows_error(self, page: Page):
login_page = LoginPage(page)
login_page.navigate()
login_page.login("admin@example.com", "wrongpassword")
error = login_page.get_error_text()
assert "Invalid credentials" in errorMilestone: A Playwright or Selenium project with POM, covering a full user journey (login → action → assertion), committed to GitHub.
Step 4: Add CI/CD Integration
This is what separates an "automation engineer" from a "tester who wrote some scripts." Your tests need to run automatically on every code change.
GitHub Actions — The Fastest Starting Point
# .github/workflows/tests.yml
name: Run Automation Tests
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: |
pip install -r requirements.txt
playwright install chromium
- name: Run API tests
run: pytest tests/api/ -v
- name: Run UI tests
run: pytest tests/ui/ -v --headed=falseOnce you push this file and your tests pass in GitHub Actions, you have proof of CI integration. This is what you show in interviews.
Milestone: Your GitHub Actions workflow runs green on every push.
Step 5: Build a Portfolio Project
A single portfolio project that demonstrates all four skills (language, API testing, UI automation, CI) is worth more than 10 disconnected scripts.
Portfolio Project Idea: E-Commerce Test Suite
Pick a free demo application (like automationexercise.com or saucedemo.com) and build a complete test suite:
qa-portfolio/
├── README.md ← Explains what the project tests and how to run it
├── requirements.txt
├── conftest.py ← Pytest fixtures (browser setup, API base URL)
├── pages/
│ ├── login_page.py
│ ├── product_page.py
│ └── checkout_page.py
├── tests/
│ ├── api/
│ │ ├── test_products_api.py
│ │ └── test_orders_api.py
│ └── ui/
│ ├── test_login.py
│ ├── test_search.py
│ └── test_checkout.py
└── .github/
└── workflows/
└── tests.ymlThe README should explain:
- What application is being tested
- How to run the tests locally
- What the CI pipeline does
- Any known limitations
This project is what you link in your resume and discuss in interviews.
How to Gain Experience Without a New Job
You do not need an automation engineer title to build automation experience. You can do it in your current role.
Talk to Your Team Lead
Most QA teams have a growing backlog of manual regression tests that nobody has automated. Propose taking on one module — "I'd like to automate the login and checkout regression tests in my spare time." Most managers say yes, because the risk is low and the upside is free automation coverage.
Even if the code is not perfect, you now have work experience writing automation at a company — not just a personal project.
Contribute to Open Source Testing Projects
Find open-source projects on GitHub that are looking for test contributors. Even small contributions count.
Build Tests for Apps You Use Daily
Pick any app you use and build automation for it. Swiggy's checkout flow, Zomato's search, a government portal. You will encounter real-world challenges (dynamic selectors, iframes, pop-ups) that make for much better interview stories than textbook examples.
The Job Search
Update Your Resume
Add a "Technical Skills" section with specific tools (Selenium/Playwright, Pytest/TestNG, REST Assured, Git, GitHub Actions). Do not list "Automation" without specifying the tool.
Your "Work Experience" section for your current manual QA role should include:
- "Automated regression test suite for login and checkout flows using Playwright and Python"
- "Reduced manual regression time from 4 hours to 25 minutes via test automation"
Quantified impact is what stands out.
Target the Right Roles
Look for: "Junior Automation Engineer," "QA Automation Engineer," "SDET (Junior)," "Test Engineer — Automation."
Roles that say "automation" in the title but "3-5 years experience required" are often flexible if you can demonstrate skill. Apply anyway.
Prepare for Technical Interviews
Automation engineer interviews typically include:
- Language basics: "Write a function that reverses a string." Simple but eliminates those who cannot write code.
- Framework questions: "Explain the Page Object Model." "What is a test fixture?" "How do you handle flaky tests?"
- Live coding: Write a simple Selenium/Playwright test for a given scenario.
- Design questions: "How would you approach automating a login feature?" "How would you structure an API test framework?"
The QA Interview Kit on this site covers all of these in depth with model answers.
How Long Will It Really Take?
Here is an honest timeline assuming 1–2 hours of daily practice:
| Timeframe | Where You Should Be |
|---|---|
| Week 1–4 | Comfortable with language basics (loops, functions, classes) |
| Week 5–8 | First API tests running with Pytest/TestNG |
| Week 9–12 | First UI tests running with Playwright/Selenium |
| Week 13–16 | POM implemented, GitHub Actions running |
| Week 17–20 | Portfolio project complete, starting to apply for roles |
| Month 6–12 | First automation role secured (depending on job market) |
These timelines assume consistent effort. If you skip weeks, they stretch proportionally.
Common Mistakes to Avoid
Mistake 1: Learning tools before fundamentals If you cannot explain what a class is, why a function should have a single responsibility, or what an assertion does, learning Selenium first will only create confusion.
Mistake 2: Never running tests in CI Local tests that work on your machine but not in CI are not ready for a job interview. Run everything in GitHub Actions.
Mistake 3: Copy-pasting without understanding When you find a working code snippet online, type it manually and make sure you understand every line. Copy-paste learning does not transfer to interviews.
Mistake 4: Waiting until ready to start applying Start applying when your portfolio has one complete, working project. You will learn more from interviews than from additional study — rejection feedback is the fastest teacher.
Summary
The transition from manual tester to automation engineer is completely achievable with 6–18 months of consistent effort. The path is: Python or Java → API testing → UI automation → CI/CD integration → portfolio project → job applications.
Your manual testing experience is not baggage. It is the context that makes your automated tests meaningful. Automation without testing judgment produces passing tests for broken features.
Start with the language. Everything else follows.
Recommended Resource
QA Interview Kit
Interview prep kit with real-world QA and API scenarios.
Related Posts
QA Engineer Salary in India 2026: Complete Breakdown by Role and City
Real QA and SDET salary ranges in India for 2026 — by experience level, company type, city, and skills. Includes manual QA, automation, and SDET roles.
Read article →Behavioral Interview Questions for QA Engineers (With Sample Answers)
Behavioral interview questions specifically for QA and SDET roles — with the STAR method explained and sample answers that actually sound human.
Read article →QA Interview Preparation Checklist: Everything You Need to Know
A complete QA interview preparation checklist — what to study, what to practice, and how to approach each round of a QA or SDET interview.
Read article →