With a year or two of experience, your projects should show framework thinking, not just scripts. These automation projects cover the Page Object Model, Cucumber BDD, REST Assured API suites, data-driven testing and reporting, each with instructions and enhancement ideas.
These projects introduce Page Object Model, BDD with Cucumber, REST API testing, and data-driven testing — core skills for junior SDETs.
Project 11: Page Object Model (POM) Framework from Scratch
| Difficulty | Intermediate |
| Tech Stack | Selenium WebDriver, Java, TestNG, POM |
| Time Needed | 5–7 days |
| Resume Value | Core framework design skill — asked in every interview |
Objective
Build a complete POM framework for an e-commerce website with proper separation of test logic, page objects, and utilities.
Folder Structure
- src/main/java/pages/ — Page Object classes (LoginPage, HomePage, CartPage, CheckoutPage)
- src/main/java/utils/ — Utilities (DriverFactory, WaitUtils, ScreenshotUtils, ConfigReader)
- src/test/java/tests/ — Test classes (LoginTest, CartTest, CheckoutTest)
- src/test/resources/ — testng.xml, config.properties
Step-by-Step Instructions
- Step 1: Create LoginPage.java — declare WebElements using @FindBy annotations
- Step 2: Use PageFactory.initElements(driver, this) in the constructor
- Step 3: Create action methods: login(username, password), getErrorMessage()
- Step 4: Create HomePage.java with methods: searchProduct(), getProductCount(), addToCart()
- Step 5: Create DriverFactory.java with getDriver(browser) method — singleton pattern
- Step 6: Create config.properties with baseUrl, browser, timeout values
- Step 7: Create ConfigReader.java to load .properties file using FileInputStream
- Step 8: Create BaseTest.java with @BeforeMethod calling DriverFactory.getDriver()
- Step 9: Write LoginTest.java extending BaseTest — call LoginPage methods, Assert results
- Step 10: Run via testng.xml — verify all tests pass with ExtentReport generated
Key Design Principles
- No direct WebDriver calls in test classes — only page object methods
- All locators defined in page classes, not in tests
- Reusable utility methods shared across all tests
Project 12: BDD Framework with Cucumber and Gherkin
| Difficulty | Intermediate |
| Tech Stack | Selenium, Java, TestNG/JUnit, Cucumber, Gherkin, Maven |
| Time Needed | 7–10 days |
| Resume Value | BDD is required in most SDET job descriptions |
Objective
Build a BDD test framework for a banking application using Cucumber, with feature files written in plain English and step definitions in Java.
Step-by-Step Instructions
- Step 1: Add Cucumber dependencies to pom.xml — cucumber-java, cucumber-testng, cucumber-junit
- Step 2: Create feature file: src/test/resources/features/Login.feature
- Step 3: Write Gherkin scenarios using Given/When/Then syntax
Example: Given the user is on the login page / When they enter valid credentials / Then they should see the dashboard
- Step 4: Create StepDefinitions.java and implement each Gherkin step with @Given/@When/@Then annotations
- Step 5: Create TestRunner.java with @CucumberOptions — features path, glue path, plugin for reports
- Step 6: Implement Background keyword for shared preconditions across scenarios
- Step 7: Use Scenario Outline with Examples table for data-driven BDD tests
- Step 8: Add tags (@smoke, @regression) to scenarios and configure runner to filter by tag
- Step 9: Generate Cucumber HTML report and Pretty console report
- Step 10: Integrate POM classes inside step definitions to maintain separation
Sample Feature File Content
Feature: User Login
@smoke
Scenario: Successful login with valid credentials
Given the user navigates to the login page
When the user enters username 'admin' and password 'password'
Then the user should be redirected to the dashboard
And the welcome message should be visible
Project 13: REST API Testing with Postman & RestAssured
| Difficulty | Intermediate |
| Tech Stack | RestAssured, Java, TestNG, JSONPath, Postman |
| Time Needed | 5–7 days |
| Resume Value | API testing is essential for all modern SDET roles |
Objective
Test a public REST API (https://reqres.in) covering all CRUD operations — GET, POST, PUT, PATCH, DELETE with schema validation and JSONPath assertions.
Step-by-Step Instructions
- Step 1: Add RestAssured dependency to pom.xml
- Step 2: Explore API on Postman first — understand endpoints, request/response structure
- Step 3: Create ApiBaseTest.java — set baseURI = "https://reqres.in/api" using RestAssured.baseURI
- Step 4: GET Test — get all users, assert statusCode 200, assert body JSON has 'data' array, extract user IDs using JSONPath
- Step 5: POST Test — create new user with JSON body {name: 'Asha', job: 'SDET'}, assert 201 status, assert response has 'id' field
- Step 6: PUT Test — update user with full body replacement, assert 200 status, assert updated fields
- Step 7: PATCH Test — partial update, assert only changed field is updated
- Step 8: DELETE Test — delete user, assert 204 No Content status
- Step 9: Add Authentication header test — pass token in header, assert 200 vs 401 without token
- Step 10: Add JSON Schema validation using hamcrest matchers
Key RestAssured Syntax to Learn
- given().header().body() — request specification
- when().get()/post()/put()/delete() — HTTP method
- .then().statusCode().body() — response validation
- extract().path("data[0].id") — JSONPath extraction
Project 14: Data-Driven Testing with Apache POI
| Difficulty | Intermediate |
| Tech Stack | Selenium, Java, TestNG, Apache POI, Excel |
| Time Needed | 4–5 days |
| Resume Value | Data-driven testing — directly on your resume |
Objective
Implement data-driven testing where test input data is read from an Excel (.xlsx) file, enabling running the same test with multiple data sets without code changes.
Step-by-Step Instructions
- Step 1: Add Apache POI dependencies — poi, poi-ooxml — to pom.xml
- Step 2: Create an Excel file TestData.xlsx with sheet 'LoginData' having columns: Username, Password, ExpectedResult
- Step 3: Add 5 rows: 2 valid, 2 invalid credential pairs, 1 empty field row
- Step 4: Create ExcelUtils.java with method: String[][] getTestData(String filePath, String sheetName)
- Step 5: Inside method, use FileInputStream → XSSFWorkbook → XSSFSheet → iterate rows/cells
- Step 6: Return 2D String array where each row is one test data set
- Step 7: Create LoginDataProvider.java with @DataProvider that calls ExcelUtils.getTestData()
- Step 8: In LoginTest, use @Test(dataProvider='loginData') and accept (String username, String password, String expected) parameters
- Step 9: Run tests — they execute once per Excel row automatically
- Step 10: Add screenshot on failure so each row's failure is captured separately
Project 15: Hybrid Framework — POM + Data-Driven + Reporting
| Difficulty | Intermediate-Advanced |
| Tech Stack | Selenium, Java, TestNG, POM, Apache POI, ExtentReports, Log4j |
| Time Needed | 10–14 days |
| Resume Value | Most in-demand framework type — directly matching your resume |
Objective
Build an enterprise-grade Hybrid Framework combining POM architecture, data-driven capabilities, ExtentReports, Log4j logging, and configuration management.
Complete Folder Structure
- src/main/java/base/ — BaseTest.java, DriverManager.java
- src/main/java/pages/ — All page object classes
- src/main/java/utils/ — ExcelUtils, ConfigReader, ScreenshotUtils, WaitUtils, ReportManager
- src/main/java/constants/ — AppConstants.java (all string constants)
- src/test/java/tests/ — All test classes
- src/test/resources/ — testng.xml, config.properties, log4j.properties
- testdata/ — Excel files
- reports/ — ExtentReports output
- screenshots/ — Failure screenshots
Key Components to Build
- DriverManager using ThreadLocal<WebDriver> for thread-safe parallel execution
- ReportManager as singleton handling ExtentReports instance
- Custom ITestListener for automatic screenshot + report logging on failure
- ConfigReader using Properties class to read config.properties
- Log4j integration for console and file logging
Project 16: Smoke Test Suite for Banking Application
| Difficulty | Intermediate |
| Tech Stack | Selenium, Java, TestNG, POM, ExtentReports |
| Time Needed | 5–7 days |
| Resume Value | Domain knowledge — banking/finance testing |
Use demo banking site https://www.globalsqa.com/angularJs-protractor/BankingProject/ to build a complete smoke test suite. Cover: Manager login, Create customer, Open account, Deposit money, Withdraw money, View transaction history, Delete customer, and Customer login with balance check. Organize tests with @Test(groups={'smoke'}) tags. Run smoke suite in under 5 minutes as would be required in real CI/CD pipelines.
Project 17: TestRail-Like Test Management System Simulation
| Difficulty | Intermediate |
| Tech Stack | Selenium, Java, TestNG, Excel/JSON, ExtentReports |
| Time Needed | 4–5 days |
| Resume Value | Shows test management experience |
Simulate a structured test management approach similar to TestRail. Create Excel sheets representing: Test Plan (Sprint, Module, Priority), Test Cases (TC_ID, Description, Precondition, Steps, Expected Result), Test Execution (TC_ID, Status, Comments, Defect_ID). After running Selenium tests, automatically update the Test Execution sheet with Pass/Fail status using Apache POI write operations. Generate a test execution summary report. This mimics real TestRail workflows from your current role.
Project 18: API + UI Integration Testing
| Difficulty | Intermediate |
| Tech Stack | Selenium, RestAssured, Java, TestNG |
| Time Needed | 5–7 days |
| Resume Value | End-to-end integration testing skills |
Build tests that combine API calls with UI verification. Flow: (1) Use RestAssured to call POST /api/users to create a user programmatically; (2) Use Selenium to navigate to the admin dashboard; (3) Verify the newly created user appears in the UI table; (4) Use API to delete the user; (5) Verify UI no longer shows the user. This tests the sync between backend and frontend — a real-world pattern used in integration testing.
Project 19: JIRA Defect Report Automation
| Difficulty | Intermediate |
| Tech Stack | JIRA REST API, RestAssured, Java, TestNG |
| Time Needed | 3–4 days |
| Resume Value | JIRA automation — unique differentiator |
Automate JIRA defect creation when a Selenium test fails. When a TestNG test fails in onTestFailure() listener: (1) Capture screenshot; (2) Call JIRA REST API POST /rest/api/2/issue with defect details — summary, description with failure message, priority, component; (3) Attach screenshot to JIRA issue using JIRA attachment API; (4) Log the JIRA ticket number in the ExtentReport. Use Jira Cloud free tier at atlassian.net for practice. This directly mirrors your current job experience.
Project 20: Accessibility Testing Automation
| Difficulty | Intermediate |
| Tech Stack | Selenium, Java, Axe-core, TestNG |
| Time Needed | 3–4 days |
| Resume Value | Growing requirement in SDET roles |
Integrate Axe accessibility testing engine with Selenium. Add axe-selenium-java dependency. After page loads, inject axe JavaScript and run axe.analyze(). Collect accessibility violations — these represent real WCAG 2.1 compliance issues like missing alt text, low contrast, missing ARIA labels. Assert zero critical violations. Generate HTML report showing all violations with element location, impact level, and fix guidance. Run across multiple pages of a website.
Use practice websites built for automation as targets, never live production sites you do not own, and publish each finished project on GitHub with a README explaining how to run it.
FAQs
What projects should a tester with 2 years of experience build?
A POM framework with CI, a Cucumber BDD suite, and a REST Assured API suite with schema validation and reports, ideally against the same demo application.
Note: reqres.in now asks for a free API key sent in an x-api-key header; check its site, or use another practice API such as JSONPlaceholder or Restful Booker.