top of page

Welcome
to NumpyNinja Blogs

NumpyNinja: Blogs. Demystifying Tech,

One Blog at a Time.
Millions of views. 

Test Intelligence Unlocked: Comparing Logging and Screenshot Techniques in Selenium vs Playwright

As a seasoned QA professional, you know that brilliant test automation isn't just about passing assertions—it's about creating an intelligent testing ecosystem that tells the complete story of your application's behavior.

Strategic logging and screenshot capture transform your automation from a simple pass/fail reporter into a sophisticated diagnostic powerhouse. When that critical production deployment fails at 2 AM, your logs become the forensic evidence that pinpoints the root cause in minutes, not hours. Your screenshots capture the exact moment of failure, revealing UI anomalies that traditional assertions miss.

In modern CI/CD pipelines where tests execute in headless environments across multiple browsers and devices, your logging strategy becomes your eyes and ears. It's the difference between spending your morning triaging mystery failures versus confidently identifying whether it's a flaky selector, a timing issue, or a genuine application bug.

This isn't about basic console.log statements—we're talking about architecting a comprehensive observability layer that scales with your test suite and delivers actionable insights to both technical and non-technical stakeholders.

ree

Log4j:


Log4j is the go-to logging framework for Java-based testing projects. It uses configuration files (log4j.xml, log4j.properties, or YAML) and operates through three core components:

  • Loggers: Entry point for log messages

  • Appenders: Output logs to files, console, or other destinations

  • Layouts: Define log message formatting


Implementation Comparison

Selenium Logging

private static final Logger logger = LogManager.getLogger(SeleniumLogging.class);

 

public static void main(String[] args) {

    logger.info("Test execution started");

    WebDriver driver = new ChromeDriver();

   

    logger.info("Navigating to example.com");

    driver.get("https://example.com");

    logger.info("Page title: {}", driver.getTitle());

   

    driver.quit();

    logger.info("Test execution completed");

}

Characteristics:

 Predictable logging around WebDriver commands, requires driver setup, integrates with TestNG/JUnit listeners.



Playwright Logging


private static final Logger logger = LogManager.getLogger(PlaywrightLogging.class);

 

public static void main(String[] args) {

    logger.info("Playwright test started");

   

    try (Playwright playwright = Playwright.create()) {

        Browser browser = playwright.chromium().launch();

        Page page = browser.newPage();

       

        logger.info("Navigating to example.com");

        page.navigate("https://example.com");

        logger.info("Page title: {}", page.title());

    }

}

Advantages:

 Enhanced event logging, built-in browser event hooks, faster execution, simpler setup.


Screenshot Implementation


Selenium Screenshots


public static void captureScreenshot(WebDriver driver, String screenshotName) {

    TakesScreenshot ts = (TakesScreenshot) driver;

    File source = ts.getScreenshotAs(OutputType.FILE);

    String destination = System.getProperty("user.dir") + "/Screenshots/" + screenshotName + ".png";

    FileHandler.copy(source, new File(destination));

}


Playwright Screenshots


public static void captureScreenshot(Page page, String screenshotName) {

    String destination = System.getProperty("user.dir") + "/Screenshots/" + screenshotName + ".png";

    page.screenshot(new Page.ScreenshotOptions().setPath(Paths.get(destination)));

}


Playwright wins:


Direct API, automatic file writing, cleaner implementation.


Advanced Reporting with Allure


For stakeholder-ready reports, Allure Framework provides interactive dashboards with step-by-step execution details and embedded screenshots.


Selenium + TestNG + Allure


@Test(description = "Verify Example.com title")

public void verifyTitle() {

    openWebsite("https://example.com");

    String title = driver.getTitle();

    Assert.assertEquals(title, "Example Domain");

    attachScreenshot();

}

 

@Step("Opening website: {url}")

public void openWebsite(String url) {

    driver.get(url);

}

 

@Attachment(value = "Screenshot", type = "image/png")

public byte[] attachScreenshot() {

    return ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);

}


Playwright + Allure


test('Verify Example.com title', async ({ page }) => {

  await allure.step('Opening website: https://example.com', async () => {

    await page.goto('https://example.com');

  });

 

  const title = await page.title();

  expect(title).toBe('Example Domain');

 

  await allure.attachment('Screenshot', await page.screenshot(), 'image/png');

});


Quick Framework Comparison

Feature

Selenium

Playwright

Setup

Complex (WebDriver + TestNG)

Simple (config file)

Screenshots

Manual file handling

Direct API

Event Logging

Limited

Built-in browser events

Allure Integration

Annotations required

Function calls

CI/CD

Additional config needed

Out-of-the-box

Best Practice


  • Use appropriate log levels (DEBUG for development, INFO for flow, ERROR for problems)

  • Include meaningful context (test names, expected vs actual results)

  • Combine Log4j for debugging with Allure for stakeholder reports

  • Always capture on failures

  • Use descriptive names with timestamps

  • Implement cleanup strategies to prevent disk bloat


When to use Log4j and Allure


Use Log4j + Basic Screenshots for simple logging needs, legacy systems, or development debugging.

Use Allure Framework when stakeholders need rich reports, you want visual documentation, or CI/CD integration is crucial.


Conclusion


While both Selenium and Playwright offer solid logging and screenshot capabilities, Playwright's modern architecture provides simpler APIs and better event handling. Combined with Allure's reporting power, Playwright creates a streamlined solution for teams wanting comprehensive test documentation with minimal configuration overhead.

The key is choosing the approach that fits your team's technical stack, reporting needs, and long-term automation strategy.

 
 

+1 (302) 200-8320

NumPy_Ninja_Logo (1).png

Numpy Ninja Inc. 8 The Grn Ste A Dover, DE 19901

© Copyright 2025 by Numpy Ninja Inc.

  • Twitter
  • LinkedIn
bottom of page