Search code examples
seleniumrobotframeworkplaywrightplaywright-python

How to get browser console logs when using Browser library in Robotframework


I'm using Robotframework and Browser library to automate some tasks on the web. I used to use Selenium, and with selenium there is a way to get the logs, for example in the case of a failure:

driver = webdriver.Remote()
logs = driver.get_log('browser')

I've been struggling to find a way to do the same exact thing using Playwright's Browser library. Is it possible?


Solution

  • Certainly. You can use the page.on('console') event to log what appears in the DevTools console. Here's an example of using debug library to do so.

    Make sure to export DEBUG=playwright:console or you won't see anything. Here's how to do it in JS:

    const playwright = require('playwright');
    const debugConsole = require('debug')('playwright:console');
    
    (async () => {
        const browser = await playwright.chromium.launch({ headless: false });
        const context = await browser.newContext();
        const page = await context.newPage();
    
        await page.on('console', (msg) => {
            if (msg && msg.text) {
              if (typeof msg.text === 'function') {
                debugConsole('PAGE LOG:', msg.text());
              } else {
                debugConsole('PAGE LOG:', msg.text);
              }
            } else {
              debugConsole('PAGE LOG:', msg);
            }
        });
    
        await page.goto('https://example.com', { waitUntil: 'networkidle' });
    
    })();
    

    And in python:

    from playwright.sync_api import sync_playwright
    
    def print_args(msg):
        for arg in msg.args:
            print(arg.json_value())
    
    with sync_playwright() as p:
        browser = p.chromium.launch()
        page = browser.new_page()
        page.on("console", print_args)
        page.goto("https://abrahamjuliot.github.io/creepjs/", wait_until="networkidle")
        page.wait_for_timeout(5000)
        browser.close()
    

    If you are looking for more system-level stuff, there is also a dumpio launch parameter that you can set, which will cause Playwright to provide verbose logs on the actual launch of browser executable.