Bird
Raised Fist0
Selenium Javatesting~8 mins

Logging test steps in Selenium Java - Framework Patterns

Choose your learning style10 modes available
Framework Mode - Logging test steps
Folder Structure
src/
└── test/
    └── java/
        └── com/
            └── example/
                ├── pages/
                │   └── LoginPage.java
                ├── tests/
                │   └── LoginTest.java
                ├── utils/
                │   └── LoggerUtil.java
                └── config/
                    └── TestConfig.java
Test Framework Layers
  • Driver Layer: Manages WebDriver setup and teardown (e.g., WebDriverFactory).
  • Page Objects: Classes representing UI pages with methods to interact with elements.
  • Tests: Test classes containing test methods using page objects and assertions.
  • Utilities: Helper classes like LoggerUtil to log test steps clearly.
  • Configuration: Holds environment settings, browser types, and credentials.
Configuration Patterns
  • Use TestConfig.java to store environment URLs, browser types, and credentials as constants or load from .properties files.
  • Use system properties or Maven profiles to switch environments (e.g., dev, staging, prod).
  • Configure logging level and output file location in LoggerUtil or log4j2.xml for flexible logging.
Test Reporting and CI/CD Integration
  • Integrate logging with test reports (e.g., TestNG reports) to show detailed test steps.
  • Use logging frameworks like Log4j2 or SLF4J for structured logs.
  • Configure CI/CD pipelines (Jenkins, GitHub Actions) to run tests and collect logs and reports automatically.
  • Store logs as artifacts for debugging failed tests.
Best Practices for Logging Test Steps
  1. Log meaningful messages before and after important actions (e.g., clicking a button, entering text).
  2. Use a centralized logging utility to keep logging consistent across tests.
  3. Include timestamps and log levels (INFO, ERROR) for clarity.
  4. Avoid logging sensitive information like passwords.
  5. Keep logs readable and concise to help debugging without noise.
Self Check

Where in this folder structure would you add a new utility class to log test steps for a new feature?

Key Result
Use a centralized logging utility in the utils layer to log clear, meaningful test steps for better debugging and reporting.

Practice

(1/5)
1. What is the main purpose of adding logging statements in Selenium Java tests?
easy
A. To make the test run faster
B. To show what the test is doing step-by-step
C. To change the test results
D. To hide errors from the user

Solution

  1. Step 1: Understand logging purpose

    Logging records actions during test execution to track progress.
  2. Step 2: Identify correct purpose

    Logging helps see what the test does, not speed or hide errors.
  3. Final Answer:

    To show what the test is doing step-by-step -> Option B
  4. Quick Check:

    Logging = Show test steps [OK]
Hint: Logging tells what happens during tests [OK]
Common Mistakes:
  • Thinking logging speeds up tests
  • Believing logging changes test results
  • Assuming logging hides errors
2. Which of the following is the correct way to create a Logger instance in Selenium Java?
easy
A. Logger logger = Logger.createLogger();
B. Logger logger = new Logger();
C. Logger logger = Logger.getLogger("TestLogger");
D. Logger logger = Logger();

Solution

  1. Step 1: Recall Logger creation syntax

    In Java, Logger is created using getLogger with a name string.
  2. Step 2: Check options for correct syntax

    Only Logger logger = Logger.getLogger("TestLogger"); uses Logger.getLogger with a string, which is correct.
  3. Final Answer:

    Logger logger = Logger.getLogger("TestLogger"); -> Option C
  4. Quick Check:

    Logger creation = getLogger("name") [OK]
Hint: Use Logger.getLogger("name") to create logger [OK]
Common Mistakes:
  • Trying to instantiate Logger with new
  • Using wrong method names like createLogger
  • Calling Logger as a function
3. What will be the output in the console after running this code snippet?
Logger logger = Logger.getLogger("TestLogger");
logger.info("Starting test");
logger.warning("Element not found");
medium
A. Error: Logger not initialized
B. Starting test\nElement not found
C. No output
D. INFO: Starting test\nWARNING: Element not found

Solution

  1. Step 1: Understand logger methods

    logger.info prints info level messages; logger.warning prints warning level messages.
  2. Step 2: Predict console output format

    Output includes level labels INFO and WARNING before messages.
  3. Final Answer:

    INFO: Starting test\nWARNING: Element not found -> Option D
  4. Quick Check:

    Logger output = Level + message [OK]
Hint: Logger prints level name before message [OK]
Common Mistakes:
  • Expecting messages without level labels
  • Thinking logger prints nothing by default
  • Confusing info and warning outputs
4. Identify the error in this Selenium Java logging code:
Logger logger = Logger.getLogger("TestLogger")
logger.info("Test started");
medium
A. Missing semicolon after getLogger statement
B. Logger cannot be used without import
C. logger.info should be logger.log
D. Logger name must be a class, not a string

Solution

  1. Step 1: Check Java syntax

    Java statements must end with a semicolon (;).
  2. Step 2: Find missing semicolon

    The first line lacks a semicolon after getLogger call.
  3. Final Answer:

    Missing semicolon after getLogger statement -> Option A
  4. Quick Check:

    Java lines end with ; [OK]
Hint: Check for missing semicolons in Java code [OK]
Common Mistakes:
  • Ignoring missing semicolon errors
  • Confusing logger.info with logger.log
  • Thinking Logger name must be a class
5. You want to log each step of a Selenium test to help debug failures. Which approach is best to add logging for multiple steps?
hard
A. Create one Logger instance and call logger.info() before each test action
B. Create a new Logger instance before every test step
C. Use System.out.println() instead of Logger for all steps
D. Add logging only after test finishes

Solution

  1. Step 1: Understand efficient logging practice

    One Logger instance reused for all steps is efficient and clear.
  2. Step 2: Evaluate other options

    Creating many Logger instances wastes resources; System.out.println lacks levels; logging only after test misses step details.
  3. Final Answer:

    Create one Logger instance and call logger.info() before each test action -> Option A
  4. Quick Check:

    Reuse one Logger, log each step [OK]
Hint: Use one Logger, log before each action [OK]
Common Mistakes:
  • Creating multiple Logger instances unnecessarily
  • Using print statements instead of Logger
  • Logging only at test end
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