Bird
Raised Fist0
Selenium Javatesting~8 mins

Extent report customization in Selenium Java - Framework Patterns

Choose your learning style10 modes available
Framework Mode - Extent report customization
Folder Structure
selenium-java-project/
├── src/
│   ├── main/
│   │   └── java/
│   │       └── com/example/app/
│   │           └── (application code)
│   └── test/
│       └── java/
│           └── com/example/tests/
│               ├── base/
│               │   └── BaseTest.java          # Base test class with setup/teardown
│               ├── pages/
│               │   └── LoginPage.java         # Page Object classes
│               ├── tests/
│               │   └── LoginTest.java         # Test classes
│               ├── utils/
│               │   ├── ExtentManager.java     # ExtentReports setup and customization
│               │   ├── ConfigReader.java      # Reads config properties
│               │   └── WebDriverFactory.java  # WebDriver setup
│               └── listeners/
│                   └── TestListener.java     # Listens to test events for reporting
└── test-output/
    └── extent-reports/                        # Generated Extent report files
Test Framework Layers
  • Driver Layer: WebDriverFactory.java manages browser drivers and sessions.
  • Page Objects: Classes like LoginPage.java encapsulate UI elements and actions.
  • Test Layer: Test classes (e.g., LoginTest.java) contain test methods using page objects.
  • Utilities:
    • ExtentManager.java configures and customizes ExtentReports (themes, system info, report path).
    • ConfigReader.java loads environment variables and credentials.
    • WebDriverFactory.java initializes WebDriver instances.
    • TestListener.java hooks into test lifecycle events to log results to ExtentReports.
  • Configuration: Properties files and ConfigReader.java manage environment and browser settings.
Configuration Patterns
  • Environment Properties: Use config.properties to store URLs, credentials, and browser types.
  • Dynamic Report Path: ExtentManager.java creates timestamped report folders under test-output/extent-reports/ for uniqueness.
  • Report Customization: Set report theme (dark/light), document title, and system info (OS, tester name) in ExtentManager.java.
  • Listener Integration: TestListener.java automatically logs test start, pass, fail, and skip events to ExtentReports.
  • Browser Selection: ConfigReader.java reads browser choice from properties to initialize correct WebDriver.
Test Reporting and CI/CD Integration
  • ExtentReports Output: Generates interactive HTML reports with detailed logs, screenshots, and test status.
  • Screenshot Capture: On test failure, TestListener.java captures screenshots and attaches them to the report.
  • CI/CD Integration: Configure Jenkins or GitHub Actions to run tests and archive ExtentReports from test-output/extent-reports/.
  • Report Archiving: Store reports as build artifacts for historical test result tracking.
  • Notification: Optionally send report links or summaries via email or chat after CI runs.
Best Practices for Extent Report Customization
  1. Centralize Report Setup: Use a single ExtentManager class to configure and provide the ExtentReports instance.
  2. Use Listeners: Implement TestNG listeners to automatically log test events without cluttering test code.
  3. Include Screenshots: Attach screenshots on failures to help diagnose issues quickly.
  4. Customize Report Appearance: Set themes, titles, and system info to make reports clear and professional.
  5. Keep Reports Organized: Use timestamped folders to avoid overwriting and to keep history of test runs.
Self Check

Where in this folder structure would you add a new method to capture and attach screenshots to the Extent report on test failure?

Key Result
Use a centralized ExtentManager and TestNG listeners to customize and generate detailed ExtentReports with screenshots and environment info.

Practice

(1/5)
1. What is the main purpose of customizing an Extent report in Selenium Java?
easy
A. To make test results clearer and easier to understand
B. To increase the speed of test execution
C. To reduce the size of the test scripts
D. To automatically fix test failures

Solution

  1. Step 1: Understand Extent report role

    Extent reports show test results in a readable format.
  2. Step 2: Identify customization benefits

    Customization helps make these results clearer and more useful.
  3. Final Answer:

    To make test results clearer and easier to understand -> Option A
  4. Quick Check:

    Customization = clearer test results [OK]
Hint: Think: Why improve report look? To understand results better [OK]
Common Mistakes:
  • Confusing report customization with test speed
  • Thinking customization changes test logic
  • Assuming customization fixes test errors
2. Which code snippet correctly sets the theme of an Extent report to DARK in Selenium Java?
easy
A. extentHtmlReporter.config().setTheme(Theme.DARK);
B. extentHtmlReporter.setTheme("dark");
C. extentHtmlReporter.config().theme = "dark";
D. extentHtmlReporter.setConfigTheme(Theme.DARK);

Solution

  1. Step 1: Recall ExtentReports theme setting syntax

    Use config() method and setTheme with Theme enum.
  2. Step 2: Match correct method and enum usage

    Only extentHtmlReporter.config().setTheme(Theme.DARK); uses config().setTheme(Theme.DARK) correctly.
  3. Final Answer:

    extentHtmlReporter.config().setTheme(Theme.DARK); -> Option A
  4. Quick Check:

    Use config().setTheme(Theme.DARK) [OK]
Hint: Remember: config() then setTheme with Theme enum [OK]
Common Mistakes:
  • Using setTheme directly without config()
  • Passing theme as string instead of Theme enum
  • Using incorrect method names
3. Given the following code snippet, what will be the title of the generated Extent report?
ExtentHtmlReporter htmlReporter = new ExtentHtmlReporter("testReport.html");
htmlReporter.config().setDocumentTitle("My Test Report");
ExtentReports extent = new ExtentReports();
extent.attachReporter(htmlReporter);
medium
A. Extent Report
B. testReport.html
C. My Test Report
D. Default Title

Solution

  1. Step 1: Identify method setting report title

    config().setDocumentTitle("My Test Report") sets the HTML page title.
  2. Step 2: Understand effect on report

    The report's browser tab will show "My Test Report" as title.
  3. Final Answer:

    My Test Report -> Option C
  4. Quick Check:

    setDocumentTitle sets report title [OK]
Hint: Look for setDocumentTitle method for report title [OK]
Common Mistakes:
  • Confusing file name with report title
  • Assuming default title is used
  • Ignoring config() method effects
4. Identify the error in the following code that prevents the Extent report from saving properly:
ExtentHtmlReporter reporter = new ExtentHtmlReporter("report.html");
ExtentReports extent = new ExtentReports();
extent.attachReporter(reporter);
// Missing flush call
medium
A. ExtentHtmlReporter should be initialized after ExtentReports
B. Incorrect file name extension, should be .txt
C. attachReporter method is deprecated and should not be used
D. Missing call to extent.flush() to save the report

Solution

  1. Step 1: Check report saving process

    Extent report requires extent.flush() to write data to file.
  2. Step 2: Identify missing flush call

    The code does not call extent.flush(), so report is not saved.
  3. Final Answer:

    Missing call to extent.flush() to save the report -> Option D
  4. Quick Check:

    Always call extent.flush() to save report [OK]
Hint: Remember to call extent.flush() after tests [OK]
Common Mistakes:
  • Forgetting to call flush()
  • Changing file extension incorrectly
  • Misunderstanding attachReporter usage
5. You want to add system information like OS and Java version to your Extent report. Which code snippet correctly adds this info before flushing the report?
ExtentReports extent = new ExtentReports();
ExtentHtmlReporter htmlReporter = new ExtentHtmlReporter("sysInfoReport.html");
extent.attachReporter(htmlReporter);
// Add system info here
extent.flush();
hard
A. htmlReporter.setSystemInfo("OS", System.getProperty("os.name")); htmlReporter.setSystemInfo("Java Version", System.getProperty("java.version"));
B. extent.addSystemInfo("OS", System.getProperty("os.name")); extent.addSystemInfo("Java Version", System.getProperty("java.version"));
C. extent.setSystemInfo("OS", System.getProperty("os.name")); extent.setSystemInfo("Java Version", System.getProperty("java.version"));
D. htmlReporter.addSystemInfo("OS", System.getProperty("os.name")); htmlReporter.addSystemInfo("Java Version", System.getProperty("java.version"));

Solution

  1. Step 1: Identify correct method to add system info

    ExtentReports class has addSystemInfo method to add info.
  2. Step 2: Confirm usage on ExtentReports instance

    System info is added on extent, not on htmlReporter.
  3. Final Answer:

    extent.addSystemInfo("OS", System.getProperty("os.name")); extent.addSystemInfo("Java Version", System.getProperty("java.version")); -> Option B
  4. Quick Check:

    Use extent.addSystemInfo() before flush [OK]
Hint: Add system info on extent, not htmlReporter [OK]
Common Mistakes:
  • Calling setSystemInfo on htmlReporter instead of extent
  • Using setSystemInfo which does not exist
  • Adding system info after flush()
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard