A Selenium-based automation testing framework with screenshot capture on test failures, page objects, utilities, and a TestNG listener for lifecycle management.
ScreenShot/
├── pom.xml
├── testng.xml
├── README.md
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ ├── base/
│ │ │ │ └── BaseTest.java (Base class with WebDriver setup)
│ │ │ ├── pages/
│ │ │ │ └── GooglePage.java (Page Object for Google Search)
│ │ │ ├── utilities/
│ │ │ │ ├── ScreenshotUtil.java (Screenshot capture utility)
│ │ │ │ └── ConfigReader.java (Config properties loader)
│ │ │ └── listeners/
│ │ │ └── TestListener.java (TestNG listener for screenshot on failure)
│ │ └── resources/
│ │ ├── config.properties (Configuration settings)
│ │ └── log4j2.xml (Logging configuration)
│ └── test/
│ └── java/
│ └── tests/
│ └── GoogleTest.java (Sample test)
├── screenshots/ (Auto-generated: test failure screenshots)
├── reports/ (Auto-generated: test logs and reports)
└── target/ (Auto-generated: compiled classes)
- Java 17+ (as per pom.xml maven.compiler.target)
- Maven 3.6+ (available at https://maven.apache.org/download.cgi)
- Chrome Browser (for ChromeDriver; WebDriverManager handles driver download)
- Eclipse IDE (recommended) or any Java IDE with TestNG plugin
Windows:
- Download Maven from https://maven.apache.org/download.cgi
- Extract to a folder (e.g.,
C:\maven) - Add
C:\maven\binto system PATH environment variable - Verify: Open PowerShell and run
mvn -version
cd D:\ScreenShot
mvn -DskipTests=true packageBrowser window will be visible during test execution.
cd D:\ScreenShot
mvn testBrowser runs in background (no UI visible).
cd D:\ScreenShot
mvn -Dheadless=true test- Right-click on the project → Run As → TestNG Suite (or Maven → test)
- Or: Right-click
testng.xml→ Run As → TestNG Suite - Or: Right-click
GoogleTest.java→ Run As → TestNG Test
Edit src/main/resources/config.properties to adjust:
browser=chrome # Browser type (chrome)
base.url=https://www.google.com # Base URL for tests
screenshots.dir=screenshots # Screenshot directory
headless=false # false = visible, true = headless
implicit.wait=10 # Implicit wait timeout in secondsPass system properties via Maven -D flag:
mvn -Dheadless=true -Dimplicit.wait=15 test- BaseTest.java: Centralized WebDriver initialization with config-driven setup
- ScreenshotUtil.java: Automatic screenshot capture with timestamped filenames
- TestListener.java: TestNG listener that captures screenshots on test failures
- ConfigReader.java: Loads
config.propertiesfor centralized configuration - GooglePage.java: Page Object model for Google Search interactions
- log4j2.xml: Logging configuration (console + file output)
- TestNG calls
setUp()(from BaseTest) → Creates Chrome WebDriver - Test method runs (e.g.,
openGoogle()) - On success: Test passes, browser closes
- On failure: TestListener captures screenshot → Browser closes → Screenshot saved to
screenshots/ - Logs written to
reports/test.log
- Screenshots:
screenshots/directory (created on first test run) - Logs:
reports/test.log(created on first test run) - Compiled classes:
target/classes/andtarget/test-classes/
Solution: Maven is not installed or not in PATH.
- Install Maven (see Prerequisites)
- Add Maven
binfolder to Windows PATH - Restart PowerShell/IDE
Solution: WebDriverManager requires internet access to download ChromeDriver.
- Ensure network is connected
- Try running a simple test to trigger driver download
- Or manually download ChromeDriver from https://chromedriver.chromium.org/
Solution: Increase implicit wait or add explicit waits in tests.
- Edit
config.properties:implicit.wait=20 - Or override at runtime:
mvn -Dimplicit.wait=20 test
Solution: Ensure listener is registered and test extends BaseTest.
- Verify
testng.xmlcontains<listener class-name="listeners.TestListener"/> - Verify test class extends
BaseTest - Check logs for errors in
reports/test.log
-
Create a new test class in
src/test/java/tests/:public class MyTest extends BaseTest { @Test public void myTest() { setUp(); // test code here tearDown(); } }
-
Register in
testng.xml:<class name='tests.MyTest' />
-
Create
MyPage.javainsrc/main/java/pages/:public class MyPage { private final WebDriver driver; public MyPage(WebDriver driver) { this.driver = driver; } // locators and methods }
-
Use in test:
MyPage page = new MyPage(driver);
String url = ConfigReader.get("base.url");
String browser = ConfigReader.get("browser");- Selenium: 4.23.1 (WebDriver automation)
- TestNG: 7.10.2 (Test framework)
- WebDriverManager: 5.9.2 (Automatic driver download)
- Log4j2: 2.20.0 (Logging)
- Commons IO: 2.11.0 (File utilities for screenshots)
For issues or improvements, refer to the pom.xml or update configurations as needed.
Last Updated: July 16, 2026
Framework Version: 1.0
Java Version: 17+