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

Issue

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.

Answered By – Nico Mee

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published